mysql - 在 LEFT JOIN 查询中使用 UNION 时遇到问题

标签 mysql union

我有以下连接查询:

SELECT t1.*, t2.*
FROM TabContent t1
LEFT JOIN HighScore t2
  ON t1.Name = t2.Layout
WHERE TabID IN (1,2,3)
ORDER BY TabID, LayoutName

结果:

+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|TabConID|  Name  | Tiles  | Layers | TabID  |Score ID|  fbID  | Layout |  Score |  Time  |  Stars |  Date  |
+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
| 1      | beetle |   30   |    5   |   1    |   1    |  2222  | beetle |  293   |  13:00 |   1    |  date  |
| 2      |elephant|   31   |    4   |   1    |  NULL  |  NULL  |  NULL  |  NULL  |  NULL  |  NULL  |  NULL  |
| 3      | dragon |   31   |    5   |   2    |   2    |  3333  | dragon |  232   |  08:35 |   2    |  date  |
+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+

现在我想显示 fbID 2222 拥有的所有名称(以及随之而来的数据)。我是这样做的:

SELECT t1.*, t2.* FROM TabContent t1 LEFT JOIN HighScore t2 ON t1.Name = t2.Layout WHERE fbID = 2222 AND TabID IN (1,2,3) ORDER BY TabID, LayoutName

结果:

+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|TabConID|  Name  | Tiles  | Layers | TabID  |Score ID|  fbID  | Layout |  Score |  Time  |  Stars |  Date  |
+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
| 1      | beetle |   30   |    5   |   1    |   1    |  2222  | beetle |  293   |  13:00 |   1    |  date  |
+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+

到目前为止一切顺利!问题是,有更多的名字(大象、龙)。我也想显示这些,但将数据(接受 TabConID、名称、图 block 、图层、TabID)留空。

这是我需要的结果:

+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
|TabConID|  Name  | Tiles  | Layers | TabID  |Score ID|  fbID  | Layout |  Score |  Time  |  Stars |  Date  |
+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
| 1      | beetle |   30   |    5   |   1    |   1    |  2222  | beetle |  293   |  13:00 |   1    |  date  |
| 2      |elephant|   31   |    4   |   1    |  NULL  |  NULL  |  NULL  |  NULL  |  NULL  |  NULL  |  NULL  |
| 3      | dragon |   31   |    5   |   2    |  NULL  |  NULL  |  NULL  |  NULL  |  NULL  |  NULL  |  NULL  |
+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+

最好的方法是使用 UNION。如果这是一个普通的查询而不是连接的查询,则查询将如下所示(这是一个非连接示例,我没有使用它,而是为了解释一些事情):

SELECT * FROM `table` WHERE fdID = 2222 AND TabID IN (1,2,3) ORDER BY TabID, LayoutName
UNION 
select TabConID, Name, Tiles, Layers, TabID, NULL, NULL, NULL, NULL, NULL, NULL, NULL FROM `table` where fbID != 2222

不幸的是,这是一个连接查询,我不知道如何使 UNION 部分与此配合使用。也使用 Google 进行了搜索,但没有成功。

希望有人能帮忙!

最佳答案

您不需要执行 UNION 查询。只需将“fbId”条件从 WHERE 移至 JOIN 条件即可。

下面的查询应该会为您提供所需的结果:

SELECT t1.*, t2.*
FROM TabContent t1
LEFT JOIN HighScore t2
  ON t1.Name = t2.Layout AND t2.fbId = 2222
WHERE TabID IN (1,2,3)
ORDER BY TabID, LayoutName

希望对你有帮助!

关于mysql - 在 LEFT JOIN 查询中使用 UNION 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8869572/

相关文章:

MySQL 加入子类别

mysql - 在三个表(mysql)上使用联合命令

UNION ALL 中的 MySQL 语法错误

java - 从内部类中返回类型 void 的重写方法返回

mysql - Magento 1.7 如何删除现有的多余网站和商店

sql - Oracle/SQL - 组合来自 'unrelated' 不相关表的计数

mysql - 操作 'UNION' 的排序规则组合非法

mysql - 如何管理分页中的mysql偏移量和限制

mysql - 从 BASH 脚本调用 mysql 时的 MariaDB --init-command

MySQL 转义问题