[英]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.