我有来自2个表的这些列
Table1 Table2
Code ID Code ID
A 1 A 1
B 1 B 1
C 1 C 1
D 1
E 1
我的查询:
Select
a.id, a.code, b.code
from
Table1 a, Table2 b
where
a.id = '1' and a.id = b.id
我的期望
ID code code
1 A A
1 B B
1 C C
1 D NULL
1 E NULL
我得到了什么
ID code code
1 A A
1 B A
1 C A
1 D A
1 E A
1 A B
1 B B
1 C B
....
有什么想法吗?明显没有帮助
由于
答案 0 :(得分:3)
嗯,两个表中的所有ID都是1,所以通过加入ID,您将获得两个表的笛卡尔积。
相反,您需要根据Table1.Code
执行左外连接:
Select a.id, a.code, b.code
from Table1 a LEFT OUTER JOIN Table2 b
on a.code = b.code
where a.id = '1';
答案 1 :(得分:2)
你需要做一个LEFT OUTER JOIN而不是Cartesian产品
SELECT a.Id, a.Code, b.Code FROM Table1 a
LEFT OUTER JOIN Table2 b ON a.Code = b.Code
WHERE a.Id = '1'
LEFT OUTER JOIN
返回连接左侧的所有行(在本例中为表1),无论连接右侧的表中是否存在匹配记录(in这种情况见表2)。如果没有匹配,则根据您的要求为b.Code返回NULL
。