sql >> Databáze >  >> RDS >> Mysql

Vlevo Připojte se k jednomu náhodnému záznamu MySQL

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




  1. ověření a přidání dat do db tabulky

  2. MySQL Zobrazit granty pro všechny uživatele

  3. Regex pro odstranění slov z věty na černé listině

  4. Výkonová hodnota vedení COMB