我已经可以弄清楚如何从主表中连接和选择行,即使辅助表没有匹配的行。我想要的有点不同。
Table A: id, pid
Table B: id, pid, uid, aid
我想要的是表 A 中的所有 pids
,以及匹配的 aid
,如果它存在,对于给定的 uid
也就是说,如果示例数据是:
表A:
1, p1
2, p2
3, p3
表 B:
1, p1, u1, abcd
2, p1, u2, pqrs
3, p2, u1, wxyz
我要选择:
p1, abcd
p2, wxyz
p3, NULL
(u1
的所有条目,如果没有条目则使用 aid=NULL)。
基本上,我已经尝试过:
SELECT A.* FROM A LEFT JOIN B ON A.pid=B.pid WHERE uid='u1'
它不起作用(我明白为什么它不会)。
最佳答案
您可以使用 left join
执行此操作,但是您需要将 b.uid
上的条件移动到 on
子句中where
子句:
select a.id, a.pid, b.aid
from a left join
b
on a.pid = b.pid and b.uid = 1;
关于MySQL left join variation - 甚至在丢失的行上选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26345570/