我有表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,但它们不是。
答案 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应该会给你你正在寻找的答案。