2014-06-13 20 views
0

我已经表A,B,和C. B和C是在同一数据库中,但是从A的不同的一个查看在连接表不匹配的条目

我有一个NUM柱和所述的辅助柱。我在B中有一个列和一个bcid列。bcid列是指C中的cid列。C也有一个asid列。

我想查询这样的,我得到一个所有条目,其中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) 

但我遇到了错误。任何与此正确的方向指导将不胜感激。

EDIT 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

尝试:

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) 
+0

这不是我想要的。在查询中,我最终得到的行数多于B和C的连接数 – Steve

+0

@Steve那么你想要什么? A中的所有行或B/C中的所有行匹配?要么可以通过子选择来完成。 – Vulcronos

+0

我想要A中的所有行,其中A中的列号与B中的列rn匹配,并且A中的列帮助与C中的列帮助不匹配。但是,我需要将C中的cid与相应的抢夺列对齐B. – Steve

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没有按不符合A和B的条件。在这里检查null应该给你你正在寻找的答案。