我已经可以弄清楚如何连接并从主表中选择行,即使辅助表没有匹配的行也是如此。我想要的是有点不同。
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'
它不起作用(我明白为什么它不会)。
答案 0 :(得分:4)
您可以使用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;
答案 1 :(得分:0)
以下查询应解决您的问题
SELECT A.pid, aid
FROM A LEFT JOIN B
ON A.pid = B.pid and B.uid = "u1";
<强>输出强> http://sqlfiddle.com/#!2/5eaa05/10
您的查询
SELECT A.*
FROM A LEFT JOIN B
ON A.pid=B.pid
WHERE uid='u1'
<强>输出强> http://sqlfiddle.com/#!2/5eaa05/12
问题在于WHERE
,LEFT JOIN
用作INNER JOIN
。