Kvůli RAND()
váš poddotaz není deterministický, a proto se provede pro každý řádek v Sponsor
tabulky a pokaždé znovu naladí náhodné ID, které se může nebo nemusí shodovat s ID aktuálního řádku. Není tedy jen možné, že žádný řádek nebude odpovídat náhodnému ID. Je také možné, že bude více řádků.
Pro vzorová data se dvěma sponzory může dílčí dotaz vrátit následující hodnoty:
- (1, 1) bude odpovídat prvnímu řádku (1=1, 2=1)
- (1, 2) bude odpovídat oběma řádkům (1=1, 2=2)
- (2, 1) nebude odpovídat žádnému řádku (1=2, 2=1)
- (2, 2) bude odpovídat druhému řádku (1=2, 2=2)
Chcete-li zaručit, že poddotaz bude proveden pouze jednou, můžete jej použít klauzuli SELECT. Poté výsledek spojte jako odvozenou tabulku s Sponsor
tabulka:
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
Ukázka:http://rextester.com/LSSJT25902