MySQL查询。从三个表中选择数据
我有三张桌子: 语言 (id,语言名称,已发布) 翻译人员 (身份证、姓名、姓氏、电话、电子邮件、已发布) trans_lang_rel(语言和译者关系。一名译者可以从一种或多种语言进行翻译) id,trans\u id,lang\u id 表格中的数据: 语言 1英语1MySQL查询。从三个表中选择数据,sql,mysql,Sql,Mysql,我有三张桌子: 语言 (id,语言名称,已发布) 翻译人员 (身份证、姓名、姓氏、电话、电子邮件、已发布) trans_lang_rel(语言和译者关系。一名译者可以从一种或多种语言进行翻译) id,trans\u id,lang\u id 表格中的数据: 语言 1英语1 2俄文1 3德语1 翻译人员 1名1姓1 999名1。surname1@gmail.com1 2姓名2姓2 888姓名2。surname2@gmail.com一, trans\u lang\u rel 1 2.11.2 3 2
2俄文1
3德语1 翻译人员 1名1姓1 999名1。surname1@gmail.com1
2姓名2姓2 888姓名2。surname2@gmail.com一, trans\u lang\u rel 1
2.11.2
3 2 1 所以我必须从这三个表中选择数据 结果应该是这样的: 姓名1 |姓氏1 |英语、俄语| 999 |姓名1。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
感谢您的帮助。您加入translator and trna_lang_rel的方式不太好。您进行了一次
完全联接
,因为您在子句上只执行了任何
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
试试像这样的东西
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
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