[英]Combine multiple rows of three tables into one row in MySQL
我读了一个问题,即将多行合并为一行MySQL ,该示例说明了如何从SELECT语句的多行中得出单行结果。 带演示的SQL Fiddle也可以正常运行。 在该问题中,有两个表: t1和t2 。 我的问题有三个表,针对这个问题我做了简化:
表格语言 :
ID INT(11) NOT NULL PRIMARY_KEY
name VARCHAR(255) NOT NULL UNIQUE
表language_have_persons :
Languages_ID INT(11) NOT NULL PRIMARY_KEY
Persons_ID INT(11) NOT NULL
表人 :
ID INT(11) NOT NULL PRIMARY_KEY
firstName VARCHAR(255) NOT NULL
lastName VARCHAR(255) NOT NULL
我想要做的是类似地合并这些表,但是现在已经好几个小时了。 这是我的最后尝试:
SELECT p1.ID
, p1.firstName
, p1.lastName
CONCAT_WS(', '
, l2de.name
, l2en.name
)
FROM
languages_have_persons AS lp, persons AS p1
LEFT JOIN languages AS l2de ON
l2de.ID = 4 -- German
LEFT JOIN languages AS l2en ON
l2en.ID = 5 -- English
WHERE p1.ID = lp.Persons_ID
ORDER BY lastName, firstName;
错误消息显示为:
Fehler
SQL-Befehl: Dokumentation
SELECT p1.ID AS ID
, p1.firstName AS firstName
, p1.lastName AS lastName
CONCAT_WS(', '
, l2de.name
, l2en.name
)
FROM
languages_have_persons AS lp, persons AS p1
LEFT JOIN languages AS l2de ON
l2de.ID = 4 LEFT JOIN languages AS l2en ON
l2en.ID = 5 WHERE p1.ID = lp.Persons_ID
ORDER BY lastName, firstName LIMIT 0, 25
MySQL meldet: Dokumentation
#1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch
nachschlagen bei '(', '
, l2de.name
, l2en.name
)
FROM
languages_have_persons AS lp, ' in Zeile 4
我也尝试了其他方法,但没有一种具有正确的语法。 我想要的结果如下:
表格语言 :
ID name
4 German
5 English
表language_have_persons :
Languages_ID Persons_ID
4 2
5 1
5 2
表人 :
ID firstName lastName
1 Joe Frazier
2 Arnold Schwarzenegger
我期望正确的SELECT语句像
firstName lastName CONCAT_WS(…
Joe Frazier English
Arnold Schwarzenegger German, English
您是否在上面的SQL语法中看到错误? 如果没有,您知道如何解决吗?
谢谢您的帮助!
SELECT p1.ID
, p1.firstName
, p1.lastName,<--------------------I had made change at this line
CONCAT_WS(', '
, l2de.name
, l2en.name
)
FROM
languages_have_persons AS lp, persons AS p1
LEFT JOIN languages AS l2de ON
l2de.ID = 4 -- German
LEFT JOIN languages AS l2en ON
l2en.ID = 5 -- English
WHERE p1.ID = lp.Persons_ID
ORDER BY lastName, firstName;
或者,如果您有进一步的查询,请尝试以下方法。
SELECT p1.ID
, p1.firstName
, p1.lastName,
l2de.name
FROM
persons p1
INNER JOIN languages_have_persons lp on p1.ID=lp.Persons_ID
INNER JOIN language l2de on l2de.ID=lp.Languages_ID
WHERE l2de.ID IN(4,5)
ORDER BY lastName, firstName;
您可以尝试上述查询。
在另一个站点上,我进行了另一次讨论,同事在其中找到了解决方案,这是
SELECT DISTINCT pl.ID
, firstName
, lastName
, languages
FROM persons p
, ( SELECT
lp.Persons_ID AS ID,
GROUP_CONCAT(DISTINCT l.name) AS languages
FROM languages l
, languages_have_persons lp
WHERE l.id = lp.Languages_ID
GROUP BY lp.Persons_ID
) AS pl
WHERE p.id = pl.id
ORDER BY p.id;
因此,问题是正确回答。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.