我有以下连接查询:
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/