mysql - 在 MySQL 中将三个表的多行合并为一行

标签 mysql sql join

我读了问题Combine multiple rows into one row MySQL该示例展示了如何从 SELECT 语句的多行中生成单行结果。 SQL Fiddle with Demo也运行良好。在该问题中,有两个表:t1t2。我的问题有三个表,我已经针对这个问题简化了它们:

语言:

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/

相关文章:

sql - Web 服务、Windows 服务或 SQL CLR 集成?

php - 查询错误重复列id sql

php - mysql_fetch_assoc 查询中的 COUNT、IF

mysql - 针对我的要求提出架构/表设计建议

MySQL 更新(如果存在)

mysql - 计算具有特定父级的类别中的广告数量

SQL 服务器错误 'Cannot find data type'

mysql - 我的 Mysql 查询没有获得正确的预期输出?

mysql - 根据查询结果删除多个表

php - PHP 进行一些查询后,MySQL 数据库中的条目发生变化