我有桌子:
id name type
其中“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
但它没有用。
如何实施?
答案 0 :(得分: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
然而,这提出了一个问题:为什么你不能允许结果中的所有字段,而忽略那些你不关心的字段?
答案 1 :(得分:1)
看起来您正在尝试将两个单独的数据集绑在一起 - 您是否考虑过在两个查询中使用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
没有意义,因为您没有执行聚合查询。