mysql - 用HAVING连接三个表

时间:2010-03-24 21:50:08

标签: mysql

我有桌子:

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

但它没有用。
如何实施?

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没有意义,因为您没有执行聚合查询。