Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kiri Bergabung dengan Rekaman Acak Tunggal MySQL

Karena RAND() subquery Anda tidak deterministik dan karenanya dieksekusi untuk setiap baris di Sponsor tabel dan setiap kali mengembalikan ID acak yang mungkin cocok atau tidak dengan ID baris saat ini. Jadi tidak hanya mungkin, tidak ada baris yang cocok dengan ID acak. Mungkin juga beberapa baris.

Untuk data sampel dengan dua sponsor, subkueri dapat mengembalikan nilai berikut:

  • (1, 1) akan cocok dengan baris pertama (1=1, 2=1)
  • (1, 2) akan cocok dengan kedua baris (1=1, 2=2)
  • (2, 1) tidak akan cocok dengan baris (1=2, 2=1)
  • (2, 2) akan cocok dengan baris kedua (1=2, 2=2)

Untuk menjamin bahwa subquery dijalankan hanya sekali, Anda dapat menggunakannya klausa SELECT. Kemudian gabungkan hasilnya sebagai tabel turunan dengan Sponsor tabel:

SELECT C.*, S.Name AS SponName 
FROM (
    SELECT C.ID AS CompID, C.Name AS CompName, (
        SELECT ID FROM Sponsor WHERE Company = C.ID ORDER BY RAND() LIMIT 1
    ) as SponID
    FROM Company C
) C
LEFT JOIN Sponsor S ON S.ID = C.SponID

Demo:http://rextester.com/LSSJT25902




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membuat sub-kueri pada hasil kueri?

  2. Menggunakan % untuk host saat membuat pengguna MySQL

  3. Cara Membuat dan Menggunakan Tampilan MySQL

  4. Kolom mana yang harus didahulukan dalam indeks? Kardinalitas lebih tinggi atau lebih rendah?

  5. Mengapa mysql max_allowed_packet reset ke 1m secara otomatis