我读了问题Combine multiple rows into one row MySQL该示例展示了如何从 SELECT 语句的多行中生成单行结果。 SQL Fiddle with Demo也运行良好。在该问题中,有两个表:t1 和 t2。我的问题有三个表,我已经针对这个问题简化了它们:
表语言:
ID INT(11) NOT NULL PRIMARY_KEY
name VARCHAR(255) NOT NULL UNIQUE
表languages_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;
您可以尝试上面的查询。
关于mysql - 在 MySQL 中将三个表的多行合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45035758/