繁体   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