Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Pozostało dołączyć do pojedynczego losowego rekordu MySQL

Z powodu RAND() Twoje podzapytanie nie jest deterministyczne i dlatego jest wykonywane dla każdego wiersza w Sponsor tabeli i za każdym razem zwraca losowy identyfikator, który może pasować lub nie do identyfikatora bieżącego wiersza. Jest więc nie tylko możliwe, że żaden wiersz nie będzie pasował do losowego identyfikatora. Możliwe jest również, że wiele wierszy będzie.

W przypadku przykładowych danych z dwoma sponsorami podzapytanie może zwrócić następujące wartości:

  • (1, 1) będzie pasować do pierwszego wiersza (1=1, 2=1)
  • (1, 2) pasuje do obu wierszy (1=1, 2=2)
  • (2, 1) nie pasuje do żadnego wiersza (1=2, 2=1)
  • (2, 2) będzie pasować do drugiego rzędu (1=2, 2=2)

Aby zagwarantować, że podzapytanie zostanie wykonane tylko raz, możesz użyć klauzuli SELECT. Następnie połącz wynik jako tabelę pochodną z 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

Demo:http://rextester.com/LSSJT25902




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wykonać skrypt mysql ze zmiennymi przy użyciu PHP::PDO?

  2. Wiosna, hibernacja, leniwe ładowanie Blob

  3. Łączenie SET i Select Query Uruchom w pojedynczym zapytaniu MySql, aby przekazać wynik w pentaho

  4. Przed czym MySQL próbuje zapobiec zjawisku, blokując całą tabelę po wykonaniu instrukcji Delete z warunkiem na nieindeksowanej kolumnie

  5. MySQL – MariaDB – pisanie pierwszej procedury przechowywanej