2016-01-26 19 views
-1

我有3個表格。表a pk = userid,表b和c fk = userid。在表b上,RoleID列等於表c中的Usermanager列,但具有新值。
所以我加入表a和b下面的查詢SQL:加入表a和b,然後連接表c以獲得在c上但不在c上的結果?

select a.Username, a.Userid, b.Roleid 
from NewTable a 
join RoleTable b 
    on a.UserID=b.UserID 
where b.RoleID = 2 

這導致502分的記錄。

表C查詢

select * 
from OldTable 
where UserManager = 1 
    and Authorized = 1 
    and Status = 'A' 

這導致500條記錄。

所以我試圖加入2個查詢來找到2個不在表c上但只在表a上的記錄。

謝謝。

+0

SELECT * FROM A,其中用戶ID不在(選擇由C用戶ID) – Chuck

+0

左連接應該得到你,只在表A中,而不是在表下的邏輯是記錄: - SELECT * FROM表A LEFT JOIN表CC ON A.Key = C.Key 其中C.Key爲NULL – Philo

+0

'不在'是直觀的,但很慢。 –

回答

0

試試這個:

select a.Username, a.Userid, b.Roleid 
from NewTable a 
join RoleTable b 
on a.UserID=b.UserID 
where 
    b.RoleID = 2 
    AND 
    NOT EXISTS 
     (select * 
     from OldTable AS c 
     where c.UserManager = 1 
      and 
      c.Authorized = 1 
      and 
      c.Status = 'A' 
      AND 
      a.userid = c.userid) 

我用你提到你是使用兩個查詢和剛纔的表C查詢到WHERE NOT EXISTS子查詢中。它應該提供你正在尋找的2個結果。

0

您可以用左做到這一點加入

select subA.* 
from (
    select a.Username, a.Userid, b.Roleid 
    from NewTable a 
    join RoleTable b 
     on a.UserID=b.UserID 
    where b.RoleID = 2 
) subA 
left join (
    select userID 
    from OldTable 
    where UserManager = 1 
     and Authorized = 1 
     and Status = 'A' 
) subB 
on subA.Userid = subB.UserID 
Where subB.userid is null 
0

像這樣的東西應該做的伎倆。您可以計算出數據庫的詳細信息。

select fields 
from tableA join tableB on something 
where whatever 
and tableA.someField in 
(select someField 
from tableA join tableB on something 
where whatever 

except 
select someEquivalentField 
from tableC) 

這兩個where whatevers應該是一樣的。

0

如果我正確理解你的問題......下面就加入表A和表C,然後找到那些不具有表對應的值c

Select * from Table A A 
LEFT JOIN Table C C On A.UserId = C.UserId 
Where C.UserId is NULL 

這是基本的概念..你需要進行這項工作得到了語法,以適應你的動機

相關問題