Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Esquerda Junte-se a um único registro aleatório MySQL


Por causa de RAND() sua subconsulta não é determinística e, portanto, é executada para cada linha em Sponsor table e toda vez retorna um ID aleatório que pode corresponder ou não ao ID da linha atual. Portanto, não é apenas possível que nenhuma linha corresponda ao ID aleatório. Também é possível que várias linhas o façam.

Para os dados de amostra com dois patrocinadores, a subconsulta pode retornar os seguintes valores:
  • (1, 1) corresponderá à primeira linha (1=1, 2=1)
  • (1, 2) corresponderá a ambas as linhas (1=1, 2=2)
  • (2, 1) não corresponderá a nenhuma linha (1=2, 2=1)
  • (2, 2) corresponderá à segunda linha (1=2, 2=2)

Para garantir que a subconsulta seja executada apenas uma vez, você pode usar a cláusula SELECT. Em seguida, junte o resultado como tabela derivada com o Sponsor tabela:
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

Demonstração:http://rextester.com/LSSJT25902