我有一个包含网站上发布的最新评论的表格,我想根据评论type
加入另一个表格。
Comments
表与此结构类似:
id | type | ressource_id |
---+------+--------------+
1 | 1 | 10 |
2 | 3 | 7 |
我想做的是加入"新闻"如果类型type = 1
(on news.id = comments.ressource_id
),"教程"表格type = 3
等等
我该怎么办?我使用CASE
和UNION
尝试了不同的查询,但从未获得预期的结果。
感谢。
答案 0 :(得分:4)
尝试在left outer join
上使用on
和type
子句匹配:
select coalesce(n.id, t.id) id
, c.type
, c.resource_id
from comments c
left
outer
join news n
on n.id = comments.resource_id
and c.type = 1
left
outer
join tutorial t
on t.id = comments.resource_id
and c.type = 3
答案 1 :(得分:2)
您可以使用联合查询执行此操作,假设您可以强制部分查询生成类似的模式,如下所示:
select n.id as id, c.something as something
from news n, comments c
where n.type = 1
and n.id = c.resource_id
union all
select n.id as id, t.something as something
from news n, tutorial t
where n.type = 3
and n.id = t.resource_id
换句话说,第一个查询只是news
和comments
加入news.type
表示评论的行,第二个查询加入news
和{{1}对于tutorials
表示教程的行。
然后工会将两者合并为一个记录集。
在这种情况下(以及许多其他情况)我会避开news.type
,因为它几乎总是需要对数据进行每行修改,这很少会扩展。运行两个查询并组合结果通常更有效。