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

Jeden do wielu SQL SELECT w jednym wierszu

To jeden ze sposobów uzyskania wyniku.

To podejście wykorzystuje skorelowane podzapytania. Każde podzapytanie używa ORDER BY klauzula, aby posortować powiązane wiersze z tabeli2 i używa LIMIT klauzula do pobrania pierwszego, drugiego i trzeciego wiersza.

SELECT a.PKID
     , a.DATA
     , (SELECT b1.U_DATA FROM table2 b1
         WHERE b1.PKID_FROM_TABLE_1 = a.PKID 
         ORDER BY b1.U_DATA LIMIT 0,1
       ) AS U_DATA1
     , (SELECT b2.U_DATA FROM table2 b2
         WHERE b2.PKID_FROM_TABLE_1 = a.PKID 
         ORDER BY b2.U_DATA LIMIT 1,1
       ) AS U_DATA2
     , (SELECT b3.U_DATA FROM table2 b3
         WHERE b3.PKID_FROM_TABLE_1 = a.PKID 
         ORDER BY b3.U_DATA LIMIT 2,1
       ) AS U_DATA3
  FROM table1 a
 ORDER BY a.PKID  

KONTYNUACJA

@gliese581g wskazuje, że przy takim podejściu mogą wystąpić problemy z wydajnością, z dużą liczbą wierszy zwracanych przez zapytanie zewnętrzne, ponieważ każde podzapytanie z listy SELECT jest wykonywane dla każdego wiersza zwróconego w zapytaniu zewnętrznym.

Nie trzeba dodawać, że takie podejście wymaga indeksu:

ON table2 (PKID_FROM_TABLE_1, U_DATA)

-lub przynajmniej-

ON table2 (PKID_FROM_TABLE_1)

Prawdopodobnie ten drugi indeks już istnieje, jeśli zdefiniowano klucz obcy. Poprzedni indeks umożliwiałby pełne zaspokojenie zapytania ze stron indeksu ("Korzystanie z indeksu"), bez potrzeby operacji sortowania ("Korzystanie z sortowania plików").

@glies581g ma rację, wskazując, że wydajność tego podejścia może być problematyczna w przypadku „dużych” zestawów.



  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 zainstalować phpMyAdmin we własnej aplikacji?

  2. Jak sprawdzić stan harmonogramu zdarzeń mysql

  3. Data aktualizacji + rok w mysql

  4. ostrzeżenie php mysql_fetch_assoc

  5. Dostęp do WordPressa