sql >> Databasteknik >  >> RDS >> Mysql

Hur man blandar en kolumn i MySql

Om du inte har något emot kan en del av tabelldata inte bearbetas (beror på tabellstorlek, förvänta dig att 50 % rad inte kan bearbetas), här är en lösning:

Originaltabell

id  name
1   Some
2   Body
3   Once
4   Told
5   Me
6   The
7   World
8   Is
9   Gonna
10  Roll
11  Me
12  I 
13  Ain't
14  The 
15  Shapest
16  Tool
17  In
18  The
19  Shed
20  She
21  was
22  looking
23  kind
24  of
25  dumb
26  with
27  her
28  finger
29  and
30  her
31  thumb

Fråga:

SELECT new_id, name FROM (
    SELECT  new_id, name FROM (
        SELECT new_meme.id as new_id, original_meme.id as original_id, original_meme.name FROM meme original_meme
        JOIN meme new_meme ON new_meme.id <>  original_meme.id
        ORDER BY RAND()
    ) layer1
    GROUP BY layer1.new_id
) layer2 GROUP BY name

Resultat (självklart olika för varje körning)

1   I 
2   In
3   Gonna
4   Ain't
5   The
6   her
7   finger
8   Some
9   dumb
10  She
15  Me
16  with
17  Told
18  and
19  World
21  Roll
22  The 
25  Tool
26  Shed
27  Is
28  Me
29  Sharpest
31  The

Obs! Du kanske tycker att frågan är mycket långsam , detta beror på att den går med i tabellen två gånger , så om datastorleken är 1000 måste den bearbeta 1000 * 1000.

Du kan kontrollera hastigheten på frågan genom att ändra ON new_meme.id <> original_meme.id till ON new_meme.id BETWEEN original_meme.id - 5 AND original_meme.id +5 (de 5 kan ändras), men det kommer att minska slumpmässigheten och fungerar inte för icke-numeriskt ID



  1. Flera sätt att infoga delade avgränsade strängar i en kolumn

  2. sql-server välj kolumn för nummer

  3. Hur MAKETIME() fungerar i MariaDB

  4. Hur förhindrar jag att en databastrigger återkommer?