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

MySql dołącza do wielu tabel o różnej liczbie wierszy

Biorąc pod uwagę Twoje dane, to zapytanie powinno zwracać to, czego chcesz:

SELECT t1.*,
       GROUP_CONCAT(t2.info SEPARATOR '|') AS info,
       GROUP_CONCAT(t2.data SEPARATOR '|') AS data
FROM table1 t1 LEFT JOIN
     join j
     ON j.id_a = t1.id_a LEFT JOIN
     table2 t2
     ON t2.id_b = j.id_b
WHERE t1.id_a = ?
GROUP BY t1.id_a;

Jeśli chcesz, możesz usunąć duplikaty za pomocą DISTINCT :

SELECT t1.*,
       GROUP_CONCAT(DISTINCT t2.info SEPARATOR '|') AS info,
       GROUP_CONCAT(DISTINCT t2.data SEPARATOR '|') AS data
FROM table1 t1 LEFT JOIN
     join j
     ON j.id_a = t1.id_a LEFT JOIN
     table2 t2
     ON t2.id_b = j.id_b
WHERE t1.id_a = ?
GROUP BY t1.id_a;

Zazwyczaj jednak lepiej jest naprawić zapytanie, aby nie generowało duplikató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. Aktualizacja tabeli 1 Z tabeli 2

  2. Zapytanie z wielokrotnym połączeniem MS Access

  3. Błąd pobierania tabeli nie istnieje, ale tabela istnieje (ActiveRecord::StatementInvalid Mysql2::Error:Tabela nie istnieje)

  4. Zmień tabelę, jeśli istnieje lub utwórz, jeśli nie

  5. Śledzenie czasu zapytań do bazy danych - Regał/knex