Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql-使用_Mysql - Fatal编程技术网

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
然而,这就产生了一个问题:为什么不能允许结果中的所有字段,而忽略那些您不关心的字段?

应该指出左(外)联接和内联接之间的区别。内部联接不会给您任何结果。