我试图避免传递两个单独的MySQL(版本5.6.37)查询,并使用事务。我认为这可以在一个查询中完成,但我需要知道我哪里出错了。
如果我使用此查询:
SELECT titles.t_id,title,cover,pageData.pageNum
FROM titles
JOIN biblio ON titles.t_id = biblio
JOIN pageData ON biblio.t_id = pageData.t_id
WHERE titles.t_id = '1';
它成功返回包含三列冗余数据的结果,并且只返回一列新数据(p_id):
t_id | title | cover | pageNum
1 | The Art of the Deal | 32.jpg | 1
1 | The Art of the Deal | 32.jpg | 2
1 | The Art of the Deal | 32.jpg | 3
1 | The Art of the Deal | 32.jpg | 4
1 | The Art of the Deal | 32.jpg | 5
我认为有一种方法可以修改查询,以便将pageNum列中的新数据展平为单个结果(即从整数值转换为分隔字符串),如下所示:
t_id | title | cover | p_id
1 | The Art of the Deal | 32.jpg | 1,2,3,4,5
我一直在SELECT中尝试使用子SELECT,但是我有一致的语法错误。 有没有办法将以下两个查询结合起来得到上述结果?
SELECT titles.t_id,title,cover
FROM titles
JOIN biblio ON titles.t_id = biblio
WHERE titles.t_id = '1';
和
SELECT pageData.pageNum FROM pageData WHERE pageData.t_id = '1'
答案 0 :(得分:3)
您可以将GROUP_CONCAT与GROUP BY结合使用。
SELECT
titles.t_id
, title,cover
, GROUP_CONCAT(pageData.pageNum) AS p_id
FROM titles
JOIN biblio ON titles.t_id = biblio
JOIN pageData ON biblio.t_id = pageData.t_id
WHERE titles.t_id = '1'
GROUP BY
t_id
, title
, cover
答案 1 :(得分:2)
使用GROUP_CONCAT
功能。假设您的意思是JOIN biblio ON titles.t_id = biblio.t_id
SELECT t.t_id, title, cover, GROUP_CONCAT(pageData.pageNum) AS pageNum
FROM titles t
JOIN biblio b ON t.t_id = b.t_id
JOIN pageData p ON b.t_id = p.t_id
WHERE t.t_id = '1'
GROUP BY t.t_id, title, cover
答案 2 :(得分:1)
使用MySQL函数GROUP_CONCAT()
可以轻松完成所需的结果
为了生成有效的SQL查询并获得您期望的结果,您还需要向查询添加GROUP BY
clause并将SELECT
子句中出现的所有其他列放入其中:
SELECT titles.t_id, title, cover, GROUP_CONCAT(pageData.pageNum) AS p_id
FROM titles
JOIN biblio ON titles.t_id = biblio
JOIN pageData ON biblio.t_id = pageData.t_id
WHERE titles.t_id = '1'
GROUP BY titles.t_id, title, cover