如何通过选择另一个字段值来连接具有两个表的表

时间:2014-09-08 14:27:24

标签: mysql

我有三张桌子。 第一桌! activity包含以下字段:id_companyid_acttype [blogpoll] 第二桌! blog包含以下字段:id,“正文 and third table!投票with these fields: 'id,'文字,回答`

现在,我希望通过加入activityactivity表中获取我的信息,blogpoll表取决于type字段。

activity table
-----------------------------
id_company|   id_act|   type
-----------------------------
1         |   1     |   blog
1         |   2     |   blog
2         |   3     |   blog
1         |   1     |   poll
2         |   4     |   blog
2         |   2     |   poll
3         |   5     |   blog

blog table
-------------------
id        |   body
-------------------
1         |   aaaa    
2         |   bbbb    
3         |   cccc
4         |   dddd
5         |   eeee

poll table
-----------------------------
id        |   text |   answer
-----------------------------
1         |   zzz  |   z   
2         |   xxx  |   x  
3         |   yyy  |   y

id_company IN (1, 2)的最终输出必须如下:

-------------------------------------------------------
id_company|   id_act|   type|   body|   text|   answer
-------------------------------------------------------
1         |   1     |   blog|   aaaa|   NULL|   NULL
1         |   2     |   blog|   bbbb|   NULL|   NULL
2         |   3     |   blog|   cccc|   NULL|   NULL
1         |   1     |   poll|   NULL|   zzz |   z
2         |   4     |   blog|   dddd|   NULL|   NULL
2         |   2     |   poll|   NULL|   xxx |   x

请帮我写这个查询。

感谢。

2 个答案:

答案 0 :(得分:2)

根据活动表

中的类型列,使用左连接和其他连接条件
select 
a.id_company,
a.id_act,
a.type,
b.body,
p.text,
p.answer
from activity a 
left join blog b on(a.id_act = b.id and a.`type` = 'blog')
left join poll p on(a.id_act = p.id and a.`type` = 'poll')
where a.id_company IN (1, 2)

Demo

答案 1 :(得分:1)

抱歉,我没有可以试用的数据库,但这应该有效: -

SELECT * FROM 
(
SELECT 
    activity.id_company
  , activity.id_act
  , activity.type
  , blog.body
  , poll.text
  , poll.answers
FROM 
activity
LEFT JOIN blog ON activity.id_act = blog.id
LEFT JOIN poll ON activity.id_act = poll.id 
)
WHERE id_company IN (1, 2)