2013-10-28 253 views
1

我有三個表分別爲A,B和C.MySQL的查詢返回錯誤結果

架構和值表A:

UID CITY  NAME 
0 Bangalore UserA 
1 Hyderabad UserB 

架構和表B值:

UID JID DETAILS 
0 1 Some Text 
0 2 Some Text 
1 3 Some Text 

表C的圖表和值:

UID JID Applied 
0 3 Yes 
1 1 Yes 

現在,我需要把所有的三個表,使得UID = 0的細節,並從第三個表retreive的JID C.

我已經寫了下面的MySQL查詢這樣做:

select 
    a.uid, 
    a.city, 
    a.name, 
    b.jid, 
    b.details 
from 
    tableB b 
    INNER JOIN tableA a on b.uid=a.uid 
where 
    jid in(
    select c.jid 
    from tableC,tableB 
    where tableC.uid=0 and tableC.jid=tableB.jid 
); 

這給了我下面的輸出:

UID CITY  NAME DETAILS APPLIED 
0 BANGALORE UserA sometext yes 

但現在,如果我想這是不存在的第三個表C的紀錄,那就是在這種情況下JID 2和3,我無法從下面得到正確的結果查詢。

select 
    a.uid, 
    a.city, 
    a.name, 
    b.jid, 
    b.details 
from 
    tableB b 
    INNER JOIN tableA a on b.uid=a.uid 
where jid in(
    select c.jid 
    from tableC,tableB 
    where tableC.uid=0 and tableC.jid!=tableB.jid 
); 

基本上我想在這裏實現的是以下scenario.TableA =用戶protfolio.TableB =喬布斯發表users.TableC =施加的對用戶的作業(經鑑定JID(JobIDs))。現在單個用戶可以申請許多工作。每當用戶申請工作時,就會輸入第三個TABLEC,它記錄哪個用戶申請了哪個工作。現在,我有用於應用工作的數據,並且我需要查詢未應用的工作。

請你指導一下我到底出錯的地方。

+0

但是'JID = 3'出現在第三個表。你的意思是隻返回'JID = 2'嗎? –

+0

是的。返回JID 1和2的詳細信息。因爲1和2 JID不存在於tableC中與tableC相對應。 – Ravikanth

回答

1

應該不是第一次查詢是...

SELECT a.uid 
    , a.city 
    , a.name 
    , b.jid 
    , b.details 
    FROM tableB b 
    JOIN tableA a 
    ON b.uid = a.uid 
    JOIN tableC c 
    ON c.jid = b.jid 
WHERE tableC.uid = 0; 

等,將c的排斥......

SELECT a.uid 
    , a.city 
    , a.name 
    , b.jid 
    , b.details 
    FROM tableB b 
    JOIN tableA a 
    ON b.uid = a.uid 
    LEFT 
    JOIN tableC c 
    ON c.jid = b.jid 
    AND tableC.uid = 0 
WHERE c.jid IS NULL; 
+0

它應該,但第一個查詢按照書面正確工作。這是OP詢問的第二個查詢... –

+0

我編輯了確切的場景。感謝您的幫助。 – Ravikanth

+0

是的 - 但它正確地寫出了查詢,然後整個事情變得更簡單了... – Strawberry