MySQL的 - 连接三个表与具有

问题描述:

我有表:MySQL的 - 连接三个表与具有

id name type 

其中“类型”是1或2

我要加入这个表与其他两个。 “type = 1”的行应该与第一个表连接,并且= 2与第二个连接。

例如,主表包含人们所做的一些事件。拳头表加入是关于人的信息,其次是关于女性。类型是性。
我需要把最后10个事件与关于这些人的所有信息。

喜欢的东西

SELECT * 
FROM tbl 
INNER JOIN tbl_1 ON tbl.name = tbl_1.name HAVING tbl.type = 1 
INNER JOIN tbl_2 ON tbl.name = tbl_2.name HAVING tbl.type = 2 

但它不工作。
它是如何实现的?

首先,HAVING子句用于分组,而不是连接。只要为ON子句中的条件

ON tbl.name = tbl_1.name AND tbl.type = 1 

其次,如果条件没有兑现,该行不会出现在内部连接的结果。由于字段(tbl.type)不能有两个不同的值,因此不会生成任何行。改为尝试左外连接。

SELECT * 
    FROM tbl 
    LEFT JOIN tbl_1 ON tbl.name = tbl_1.name AND tbl.type = 1 
    LEFT JOIN tbl_2 ON tbl.name = tbl_2.name AND tbl.type = 2 

但是,这带来了一个问题:你为什么不能让结果中的所有领域,而忽略你不关心的人?

+0

应该指出LEFT(OUTER)JOIN和INNER JOIN之间的区别。 INNER JOIN不会给你任何结果。 – erikkallen 2010-03-24 22:13:52

它看起来像你试图将两个单独的数据集合在一起 - 你有没有考虑过在两个查询中使用Union All?例如:


select * from tbl inner join tbl_1 on tbl.name = tbl1.name where tbl.type = 1 
union all 
select * from tbl inner join tbl_2 on tbl.name = tbl2.name where tbl.type = 1 

这当然假设您的两个连接表具有相同的列配置。

使用Having在这种情况下没有意义,因为您没有执行聚合查询。