【问题标题】:MySQL query. Select data from three tablesMySQL 查询。从三个表中选择数据
【发布时间】:2010-12-15 08:33:25
【问题描述】:

我有三张桌子:

语言 (id,lang_name, 已发布)

翻译人员 (身份证、姓名、姓氏、电话、电子邮件、已发表)

trans_lang_rel(语言和翻译者的关系。一名翻译者可以翻译一种或多种语言)

id、trans_id、lang_id

表格中的数据:

语言

1 英语 1
2 俄语 1
3 德语 1

译者

1 姓名 1 姓 1 999 name1.surname1@gmail.com 1
2 姓名2 姓2 888 name2.surname2@gmail.com 1

trans_lang_rel

1 1 1
2 1 2
3 2 1

所以我必须从这三个表中选择数据。

结果应该是这样的:

姓名1 |姓氏1 |英语,俄语 | 999 | name1.surname1@gmail.com

我尝试过类似的方法,但得到了奇怪的结果:

SELECT t.*, 
GROUP_CONCAT(l.lang_name SEPARATOR ", ") AS language 
FROM translators AS t, 
trans_lang_rel AS tlr 
LEFT JOIN language AS l ON l.id = tlr.lang_id ORDER BY t.id 

您的帮助将不胜感激。

【问题讨论】:

    标签: sql mysql


    【解决方案1】:

    试试类似的东西

    SELECT  t.name,
            t.surname,
            GROUP_CONCAT(l.lang_name SEPARATOR ", "),
            t.phone,
            t.email
    FROM    translators t INNER JOIN
            trans_lang_rel tlr  ON  t.id = tlr. trans_id INNER JOIN
            language l  ON  tlr.lang_id = l.id
    GROUP BY    t.name,
                t.surname,
                t.phone,
                t.email
    

    【讨论】:

      【解决方案2】:
      SELECT
        translators.name,
        translators.surname,
        GROUP_CONCAT(language.name SEPARATOR ", ") AS language,
        translators.phone,
        translators.email
      FROM
        translators
      LEFT OUTER JOIN
        trans_lang_rel
      ON
        trans_lang_rel.trans_id = translators.id
      LEFT OUTER JOIN
        language
      ON
        trans_lang_rel.lang_id = language.id
      

      【讨论】:

        【解决方案3】:

        你加入 translate 和 trna_lang_rel 的方式并不好。你做了一个full join,因为你从来没有ON子句

        SELECT t.*, 
        GROUP_CONCAT(l.lang_name SEPARATOR ", ") AS language 
        FROM translators t 
        JOIN trans_lang_rel tlr ON t.id = trans_id
        LEFT JOIN language AS l ON l.id = tlr.lang_id
        ORDER BY t.id 
        

        【讨论】:

          猜你喜欢
          • 2016-04-28
          • 1970-01-01
          • 1970-01-01
          • 2010-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多