关于sql:MySQL查询。从三个表中选择数据

MySQL query. Select data from three tables

我有三个表:

语言
(id,lang_name,已发布)

翻译员
(ID,姓名,姓氏,电话,电子邮件,已发布)

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

id,trans_id,lang_id

表中的数据:

语言

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

翻译器

1名称1姓氏1 999名称[email protected] 1
2 Name2姓氏2 888 [email protected] 1

trans_lang_rel

1 1 1
2 1 2
3 2 1

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

结果应如下所示:

名称1 |姓1 |英语,俄语| 999 | [email protected]

我已经尝试过类似的操作,但结果却很奇怪:

1
2
3
4
5
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

我们将不胜感激。


尝试类似

的方法

1
2
3
4
5
6
7
8
9
10
11
12
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

您加入翻译和trna_lang_rel的方式不好。您之所以创建了full join,是因为您从来没有ON子句

1
2
3
4
5
6
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