MySQL根据字段值加入不同的表

时间:2014-06-10 12:02:11

标签: mysql sql join

我有一个包含网站上发布的最新评论的表格,我想根据评论type加入另一个表格。

Comments表与此结构类似:

id | type | ressource_id |
---+------+--------------+
1  |  1   |      10      |
2  |  3   |       7      |

我想做的是加入"新闻"如果类型type = 1on news.id = comments.ressource_id),"教程"表格type = 3等等

我该怎么办?我使用CASEUNION尝试了不同的查询,但从未获得预期的结果。

感谢。

2 个答案:

答案 0 :(得分:4)

尝试在left outer join上使用ontype子句匹配:

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

换句话说,第一个查询只是newscomments加入news.type表示评论的行,第二个查询加入news和{{1}对于tutorials表示教程的行。

然后工会将两者合并为一个记录集。

在这种情况下(以及许多其他情况)我会避开news.type,因为它几乎总是需要对数据进行每行修改,这很少会扩展。运行两个查询并组合结果通常更有效。