Debido a RAND()
su subconsulta no es determinista y, por lo tanto, se ejecuta para cada fila en Sponsor
table y cada vez devuelve un ID aleatorio que puede coincidir o no con el ID de la fila actual. Por lo tanto, no solo es posible que ninguna fila coincida con la identificación aleatoria. También es posible que varias filas lo hagan.
Para los datos de muestra con dos patrocinadores, la subconsulta puede devolver los siguientes valores:
- (1, 1) coincidirá con la primera fila (1=1, 2=1)
- (1, 2) coincidirá con ambas filas (1=1, 2=2)
- (2, 1) no coincidirá con ninguna fila (1=2, 2=1)
- (2, 2) coincidirá con la segunda fila (1=2, 2=2)
Para garantizar que la subconsulta se ejecute solo una vez, puede usar la cláusula SELECT. Luego únase al resultado como tabla derivada con el Sponsor
tabla:
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
Demostración:http://rextester.com/LSSJT25902