sql >> Database >  >> RDS >> Mysql

Links deelnemen aan een enkele willekeurige record MySQL

Vanwege RAND() uw subquery is niet deterministisch en wordt dus uitgevoerd voor elke rij in Sponsor tabel en keert elke keer een willekeurige ID terug die al dan niet overeenkomt met de ID van de huidige rij. Het is dus niet alleen mogelijk dat geen enkele rij overeenkomt met de willekeurige ID. Het is ook mogelijk dat er meerdere rijen zijn.

Voor de voorbeeldgegevens met twee sponsors kan de subquery de volgende waarden retourneren:

  • (1, 1) komt overeen met de eerste rij (1=1, 2=1)
  • (1, 2) komt overeen met beide rijen (1=1, 2=2)
  • (2, 1) komt met geen enkele rij overeen (1=2, 2=1)
  • (2, 2) komt overeen met de tweede rij (1=2, 2=2)

Om te garanderen dat de subquery slechts één keer wordt uitgevoerd, kunt u deze gebruiken met de SELECT-component. Voeg vervolgens het resultaat toe als afgeleide tabel met de Sponsor tafel:

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. mysql proxy sokken

  2. mysql date_sub met een veld als interval

  3. complexe sql-instructie naar verschillende rijen

  4. Query met metadata van HIVE met MySQL als metastore