2016-10-17 65 views
0

是否有可能在查詢中使用另一個select語句的where條件。例如:我可以使用where語句的select語句

WHERE main_section ='Supplier' AND type_of_pay ='Advance' AND 
((select final_dateofpay FROM com_payments 
WHERE main_section ='Supplier') IS NOT NULL) 
+0

你試過了嗎?你可以顯示其餘的查詢嗎? JOIN可能與子選擇的你更相關。 –

+0

是的。這應該工作。 – Erik

+0

看起來有點奇怪。你想做什麼?請看看'EXISTS'。 – jarlh

回答

1

,您無法在where子句,因爲你的代碼

(select final_dateofpay FROM com_paymentsWHERE main_section ='Supplier') 返回多個行中使用這樣的子查詢。因此,它不能直接與IS NOT NULL 結合使用。記住where子句在行級操作。

但是,我認爲你想檢查子查詢是否返回結果。在這種情況下,你可以使用它像這樣

WHERE main_section ='Supplier' AND type_of_pay ='Advance' AND exists (select final_dateofpay FROM com_payments WHERE main_section ='Supplier')

1

SQL標準允許子查詢表達與像IN (...)NOT IN (...)EXISTS (...)NOT EXISTS(...)報表一大堆。

在這種情況下,查詢是:

WHERE main_section ='Supplier' AND type_of_pay ='Advance' AND 
    EXISTS (select final_dateofpay FROM com_payments 
    WHERE main_section ='Supplier')) 

此查詢的結果將是,你要麼因爲不存在與任何main_section 'Supplier'com_payments所有原始行,因爲一個不就得不到行存在。

造成這種奇怪結果的原因是您沒有引用子查詢中包含select語句的任何字段。在引用主查詢的子查詢where中添加過濾器時,您可能會得到您要達到的結果。