[英]Can MySQL Nested Select return list of results
I want to write a mysql statement which will return a list of results from one table along with a comma separated list of field from another table. 我想写一条mysql语句,它将返回一个表的结果列表以及另一个表的逗号分隔字段列表。 I think an example might better explain it 我认为一个例子可能会更好地解释它
Table 1
========================
id First_Name Surname
----------------------
1 Joe Bloggs
2 Mike Smith
3 Jane Doe
Table 2
========================
id Person_Id Job_id
---------------------
1 1 1
2 1 2
3 2 2
4 3 3
5 3 4
I want to return a list of people with a comma separated list of job_ids. 我想返回用逗号分隔的job_ids列表的人员列表。 So my result set would be 所以我的结果集是
id First_Name Surname job_id
------------------------------
1 Joe Bloggs 1,2
2 Mike Smith 2
3 Jane Doe 3,4
I guess the sql would be something like 我猜sql会像
select id, First_Name, Surname, (SELECT job_id FROM Table 2) as job_id from Table 1
but obviously this does not work so need to change the '(SELECT job_id FROM Table 2) as job_id' part. 但是显然这是行不通的,因此需要更改“(从表2中选择job_id为表job_id)”部分。
Hope this makes sense 希望这有意义
Thanks John 谢谢约翰
You may want to use the GROUP_CONCAT()
function, as follows: 您可能要使用GROUP_CONCAT()
函数,如下所示:
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;
Let's test it with your example data: 让我们用示例数据进行测试:
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);
Result of the query: 查询结果:
+----+------------+-----------+--------+
| id | first_name | last_name | job_id |
+----+------------+-----------+--------+
| 1 | Joe | Bloggs | 1,2 |
| 2 | Mike | Smith | 2 |
| 3 | Jane | Doe | 3,4 |
+----+------------+-----------+--------+
Note that by default, the result of GROUP_CONCAT()
is truncated to the maximum length of 1024 . 请注意,默认情况下, GROUP_CONCAT()
的结果被截断为最大长度1024 。 However this can be set to a much larger value . 但是,可以将其设置为更大的值 。 Use the SET command if you require to modify it, as follows: 如果需要修改它,请使用SET命令,如下所示:
SET GLOBAL group_concat_max_len = 2048;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.