我有两个表正在尝试合并。我希望左表显示所有 EmbroideryID,而右表应该为这些 EmbroideryID 返回 null。但是,我只获得两个表中都存在的 EmbroideryID,这不是我想要的。我想要左表中的所有结果,无论右表是否有结果。
左表:
mysql> SELECT * FROM Embroidery WHERE Customer = 'AAAAAAAA';
+--------------+----------+------------------------ ---+
|刺绣ID |客户|描述 |
+--------------+----------+------------------------ ---+
| 1 |啊啊啊啊|刺绣1 |
| 2 |啊啊啊啊|刺绣2 |
| 3 |啊啊啊啊|刺绣3 |
| 4 |啊啊啊啊|刺绣4 |
| 5 |啊啊啊啊|刺绣5 |
+--------------+----------+------------------------ ---+
右表:
从 EmbroideryForMen 中选择*;
+----------+--------------+------------+
|客户|刺绣ID |男士编号 |
+----------+--------------+------------+
|啊啊啊啊| 1 | 4 |
|啊啊啊啊| 1 | 8 |
|啊啊啊啊| 1 | 12 | 12
+----------+--------------+------------+
我期待的是:
+--------------+----------+------------------------ ---+------------+
|刺绣ID |客户|描述 |男士编号 |
+--------------+----------+------------------------ ---+------------+
| 1 |啊啊啊啊|刺绣1 | 4 |
| 1 |啊啊啊啊|刺绣2 | 8 |
| 1 |啊啊啊啊|刺绣3 | 12 | 12
| 2 |啊啊啊啊|刺绣4 |空|
| 3 |啊啊啊啊|刺绣5 |空 |
| 4 |啊啊啊啊|刺绣5 |空 |
| 5 |啊啊啊啊|刺绣5 |空 |
+--------------+----------+------------------------ ---+------------+
这里还有一个 SQLFiddle,您可以查看: http://sqlfiddle.com/#!2/579bac/3
我想要看到这样的表格的原因是因为用户并非总是会选择一个人来接收刺绣,因此永远不会创建行/记录。我想避免将空记录写入 EmbroideryForMen,但如果需要,我会这样做。
非常感谢任何帮助。
最佳答案
以下是实现它的方法:
将 m.customer = "AAAAAAAA"
替换为 e.customer = "AAAAAAAA"
(因为 m.customer 可能为 null 且 null != "AAAAAAAA")和
删除 AND e.EmbroideryID = 1
(以显示所有行)
SELECT *
FROM Embroidery e
LEFT JOIN EmbroideryForMen m
ON e.EmbroideryID = m.EmbroideryID
AND e.Customer = m.Customer
WHERE e.Customer = "AAAAAAAA";
关于mysql - 连接表并期望第二个表的结果为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27303664/