查看已连接表中不匹配的条目

时间:2014-06-13 15:37:47

标签: sql select join inner-join

我有表A,B和C. B和C在同一个数据库中但与A不同。

我在A中有一个num列和一个援助列。我在B中有一个列和一个bcid列.bcid列指的是C中的cid列.C也有一个asid列。

我想要一个查询,以便我获得A中的所有条目,其中num和rn条目匹配但辅助和asid条目不同。

到目前为止,我能做的最好的事情就是连接表B和C:

SELECT * FROM (B INNER JOIN C ON B.rob = C.cid)

但我似乎无法在我的查询中为上表添加别名。我想这样做:

SELECT * FROM A, (SELECT * FROM (B INNER JOIN C ON B.rob = C.cid)) TMP
WHERE (A.num = TMP.rn AND A.aid <> TMP.asid)

但我遇到了错误。我们非常感谢任何正确指导的指导。

编辑1:

我将按如下方式表示一个表(假设一个表有n列和m行:

Name: (col1, col2,..., coln) [(entry1, entry2,... entry n), (entry n+1, entry n+2, ... entry 2n), ..., (entry (m-1)*n, entry (m-1)*n + 1, ..., entry (m*n))]

示例输入:

A : (num, aid) [(1,2), (1,3), (1,4), (1,7)]
B : (rn, bcid) [(1,1), (1,2), (1,3), (1,4)]
C : (cid, asid) [(1,3), (2,4), (3,2), (4,6)]

正确输出:     [(1,7)]

输出我得到了: [(1,2),(1,3),(1,4),(1,7)]

我知道为什么我得到了输出:我假设A和B和C的连接之间的对应关系是1对1,但它们不是。

2 个答案:

答案 0 :(得分:0)

尝试:

select *
from A
where not exists (
select 1 from B
inner join C on B.rob = C.cid
where A.aid = C.asid
and A.num = B.rn)

答案 1 :(得分:0)

尝试一下:

select *
from A 
inner join B on A.num = B.rn 
left join C on A.aid = C.asid and B.bcid = C.cid -- or B.rob? 
where C.asid is null

左连接或左外连接为您留下A + B中的所有行,填入空值,其中C与'on'条件下的A和B不匹配。在这里检查null应该会给你你正在寻找的答案。