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

Czy MySQL Nested Select może zwrócić listę wyników?

Możesz użyć GROUP_CONCAT() funkcja w następujący sposób:

SELECT    t1.id, 
          t1.first_name, 
          t1.last_name,
          GROUP_CONCAT(DISTINCT job_id ORDER BY job_id SEPARATOR ',') job_id
FROM      Table1 t1
JOIN      Table2 t2 ON (t2.Person_id = t1.id)
GROUP BY  t1.id;

Przetestujmy to na przykładowych danych:

CREATE TABLE Table1 (
    id int AUTO_INCREMENT PRIMARY KEY, 
    first_name varchar(50), 
    last_name varchar(50));

CREATE TABLE Table2 (
    id int AUTO_INCREMENT PRIMARY KEY, 
    person_id int,
    job_id int);

INSERT INTO Table1 VALUES (NULL, 'Joe', 'Bloggs');
INSERT INTO Table1 VALUES (NULL, 'Mike', 'Smith');
INSERT INTO Table1 VALUES (NULL, 'Jane', 'Doe');

INSERT INTO Table2 VALUES (NULL, 1, 1);
INSERT INTO Table2 VALUES (NULL, 1, 2);
INSERT INTO Table2 VALUES (NULL, 2, 2);
INSERT INTO Table2 VALUES (NULL, 3, 3);
INSERT INTO Table2 VALUES (NULL, 3, 4);

Wynik zapytania:

+----+------------+-----------+--------+
| id | first_name | last_name | job_id |
+----+------------+-----------+--------+
|  1 | Joe        | Bloggs    | 1,2    | 
|  2 | Mike       | Smith     | 2      | 
|  3 | Jane       | Doe       | 3,4    | 
+----+------------+-----------+--------+

Zauważ, że domyślnie wynik GROUP_CONCAT() jest obcięty do maksymalnej długości 1024 . Można to jednak ustawić na znacznie większy wartość . Użyj polecenia SET, jeśli chcesz je zmodyfikować, w następujący sposób:

SET GLOBAL group_concat_max_len = 2048;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego wstawianie MySQL InnoDB jest tak wolne?

  2. Jak wstawić pliki BLOB i CLOB w MySQL?

  3. Jak podzielić tekst oddzielony przecinkami w procedurze składowanej MySQL

  4. Różnice w tygodniach między PHP a MySQL

  5. MySQL zwraca tylko jeden wiersz