mysql - 使用 HAVING 连接三个表

标签 mysql

我有表:

id name type

其中“类型”是 1 或 2

我需要将这张 table 与另外两张 table 合并。 “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

但是,这带来了一个问题:为什么不能允许结果中的所有字段,而忽略那些您不关心的字段?

关于mysql - 使用 HAVING 连接三个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2511667/

相关文章:

php - MySQL查询优化——随机记录

php - 仅更新已由用户修改或添加的字段

PHP在cookie中存储密码

php - Laravel:用 eloquent 获取最常用的单词

iphone - SQlite同步方案

php - 如何在表格中水平和垂直打印数据

mysql - 统计所有具有特定金额总和的用户

php - 当有新数据可供显示时,如何在已打开的网页上显示对话框?

php - 使用 php 创建异步数据库

mysql - 订单联盟查询