我正在努力加入3张桌子。
table1.
grp_id | email_id
1 | 3
1 | 58
table2.
sam_msg_id | sam_subject
3 | Funnel
table3.
id | subject
58 | testing check
Desired Output:
id |grp_id|email_id|sam_subject|subject |
184|1 |3 |funnel | |
185|1 |58 | |testing check|
我试过的查询:
SELECT table1.*, table2.sam_subject, table3.*
FROM table1
INNER JOIN table2
ON table2.sam_msg_id = table1.email_id
INNER JOIN table3
ON table3.id = table1.email_id
WHERE table1.grp_id = '1'
我在这里要做的是从table2和table3获取主题及其id的列表,其中id在email1id下的table1中找到。
当我尝试使用一个内连接时,只检查来自table2的数据,它正在工作。
我不熟悉使用内部连接因此我无法真正看到我做错了什么。
我正在使用MySQL。
答案 0 :(得分:3)
听起来你需要LEFT JOIN
SELECT table1.*, table2.sam_subject, table3.*
FROM table1
LEFT JOIN table2
ON table2.sam_msg_id = table1.email_id
LEFT JOIN table3
ON table3.id = table1.email_id
WHERE table1.grp_id = '1'
根据您的编辑,以下内容应该为您提供所需的结果:
SELECT t1.grp_id,
t1.email_id,
coalesce(t2.sam_subject, '') sam_subject,
coalesce(t3.subject, '') subject
FROM t1
left JOIN t2
ON t2.sam_msg_id = t1.email_id
left JOIN t3
ON t1.email_id = t3.id
WHERE t1.grp_id = '1'
答案 1 :(得分:1)
我对你的要求感到有点困惑。如果您可以提供当前数据和所需输出的示例,我们可以确定解决方案。
实际上,我怀疑你需要阅读LEFT JOIN
,如果您的子表中没有匹配的记录,它将返回NULL
。如果没有匹配,INNER JOIN
将不会返回记录。
看一下这篇文章,了解不同类型的连接:
http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html
更新:
我不确定您想要的结果的第一列在哪里,但下面的查询可以获得所需的结果:
SELECT t1.*, t2.sam_subject, t3.subject
FROM Table1 as t1
LEFT JOIN table2 as t2
on t1.email_id = t2.sam_msg_id
LEFT JOIN table3 as t3
on t1.email_id = t3.id