mysql-使用
我有一张桌子:mysql-使用,mysql,Mysql,我有一张桌子: id name type 其中“类型”为1或2 我需要把这张桌子和另外两张桌子连接起来。具有“type=1”的行应与第一个表连接,具有“type=2”的行应与第二个表连接 例如,主表包含一些People所做的事件。要加入的第一个表是关于男人的信息,第二个表是关于女人的信息。类型是性。 我需要拍下最后10场关于这些人的所有信息 差不多 SELECT * FROM tbl INNER JOIN tbl_1 ON tbl.name = tbl_1.name HAVING tbl.ty
id name type
其中“类型”为1或2
我需要把这张桌子和另外两张桌子连接起来。具有“type=1”的行应与第一个表连接,具有“type=2”的行应与第二个表连接
例如,主表包含一些People所做的事件。要加入的第一个表是关于男人的信息,第二个表是关于女人的信息。类型是性。我需要拍下最后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
但它不起作用。它是如何实现的?看起来您正在尝试将两个独立的数据集绑定在一起-您是否考虑过在两个查询上使用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
没有意义,因为您没有执行聚合查询。首先,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
然而,这就产生了一个问题:为什么不能允许结果中的所有字段,而忽略那些您不关心的字段?应该指出左(外)联接和内联接之间的区别。内部联接不会给您任何结果。