簡體   English   中英

在MySQL中將三張表的多行合並為一行

[英]Combine multiple rows of three tables into one row in MySQL

我讀了一個問題,即將多行合並為一行MySQL ,該示例說明了如何從SELECT語句的多行中得出單行結果。 帶演示SQL Fiddle也可以正常運行。 在該問題中,有兩個表: t1t2 我的問題有三個表,針對這個問題我做了簡化:

表格語言

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM