2012-04-08 12 views
1

下面的代碼取出數據如果來自表2中的SubjectB列相匹配的主題從表A柱1.MYSQL如何使用WHERE EXISTS條件爲主表中的另一個表和正常的WHERE條件選擇數據?

SELECT 
UID 
FROM 
Table1 
WHERE EXISTS (
    SELECT 1 
    FROM Table2 
    WHERE SubjectB = SubjectA 
) 

我想閉合括號後添加一個附加條件:

AND another_column_from_table1 > 10 

但sytax似乎並不合法。使用WHERE EXISTS進行查詢的正確方法是什麼...以及條件是什麼?

+0

你會得到什麼錯誤? – 2012-04-08 22:15:05

+0

我沒有錯誤。查詢不輸出任何東西:( – tjones 2012-04-08 22:16:51

+2

語法是有效的,然後 – 2012-04-08 22:18:28

回答

4

鑑於你的初始查詢,你應該能夠寫:

SELECT UID 
    FROM Table1 
WHERE EXISTS (SELECT 1 
       FROM Table2 
       WHERE SubjectB = SubjectA 
      ) 
    AND another_column_from_table1 > 10; 

不應該有從語法錯誤只需將條件添加到查詢的末尾即可。從評論看來,這似乎是語法上接受的,但不產生任何輸出。最明顯的技術調試是這樣的:

SELECT UID, another_column_from_table1 
    FROM Table1 
WHERE EXISTS (SELECT 1 
       FROM Table2 
       WHERE SubjectB = SubjectA 
      ) 

這將顯示在列中的值;大概是因爲當你添加額外的過濾條件時結果集是空的,這個選擇的第二列中的值將全部小於10(或空)。

如果有在表1和表2條目之間的一比一的關係,那麼你可以改用一個JOIN:

SELECT t1.UID 
    FROM Table1 AS t1 
    JOIN Table2 AS t2 ON t2.SubjectB = t1.SubjectA 
WHERE t1.another_column_from_table1 > 10; 

如果有可能在表2幾行於表1的每一行,然後你需要添加DISTINCT:

SELECT DISTINCT t1.UID 
    FROM Table1 AS t1 
    JOIN Table2 AS t2 ON t2.SubjectB = t1.SubjectA 
WHERE t1.another_column_from_table1 > 10; 
+0

謝謝@ jonathan你是對的,它似乎是雖然語法是有效的,但是我沒有得到輸出的原因是沒有滿足其中一個條件,感謝幫助一個noob! – tjones 2012-04-08 22:44:28

1

你爲什麼不跑這個?

SELECT UID FROM Table1, Table2 
WHERE SubjectB = SubjectA AND another_column_from_table1 > 10 

可能是一個連接就可以少反模式:)

+0

SubjectB列存在於Table2中,數據結構的方式,我必須有兩個不同的表格,所以我不確定這會起作用 – tjones 2012-04-08 22:22:22

+0

@tjones它應該再次檢查 – 2012-04-08 22:22:54

+0

有趣!我幾乎在那裏,這種方法似乎工作,原來的語法似乎是有效的,問題是,其中一個條件是不滿意的,謝謝大家! – tjones 2012-04-08 22:43:05