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
但是,这带来了一个问题:你为什么不能让结果中的所有领域,而忽略你不关心的人?
答
它看起来像你试图将两个单独的数据集合在一起 - 你有没有考虑过在两个查询中使用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
在这种情况下没有意义,因为您没有执行聚合查询。
应该指出LEFT(OUTER)JOIN和INNER JOIN之间的区别。 INNER JOIN不会给你任何结果。 – erikkallen 2010-03-24 22:13:52