2016-03-02 46 views
0

我的SQL查詢有一點問題。在我的數據庫中,有3個表格table1,table2,table3和一些字段。在這種情況下,每個表只有最多3個字段(id,field1,field2)是相關的,我試圖在下面的查詢中保持簡單。PostgreSQL - 使用特定查詢得到錯誤的結果

我有以下查詢:

SELECT t1.field1, t1.field2 
FROM table1 t1, table2 t2, table3 t3 
WHERE t3.field1 = 'param1' 
    AND t3.id = t1.t3_id 
    AND t1.field2 = 'param2' 
    OR t1.field2 IS NULL 
    AND t2.field1 = 'param3' 
    AND t2.id = t1.t2_id 

出於某種原因,我總是得到錯誤的結果,所以我決定加入

SELECT t2.id

AND t2.id = 1

測試它

SELECT t1.field1, t1.field2, t2.id 
FROM table1 t1, table2 t2, table3 t3 
WHERE t3.field1 = 'param1' 
    AND t3.id = t1.t3_id 
    AND t1.field2 = 'param2' 
    OR t1.field2 IS NULL 
    AND t2.field1 = 'param3' 
    AND t2.id = t1.t2_id 
    AND t2.id = 1 
在我的結果集

現在,仍然有條目與t2.id!= 1,我怎樣才能避免這種情況?

回答

2

這是導致混淆的OR。把它放在括號內:

SELECT t1.field1, t1.field2, t2.id 
FROM table1 t1, table2 t2, table3 t3 
WHERE t3.field1 = 'param1' 
    AND t3.id = t1.t3_id 
    AND (t1.field2 = 'param2' OR t1.field2 IS NULL) 
    AND t2.field1 = 'param3' 
    AND t2.id = t1.t2_id 
    AND t2.id = 1 

重新寫了現代化的,明確的JOIN語法:

SELECT t1.field1, t1.field2, t2.id 
FROM table1 t1 
JOIN table2 t2 ON t2.id = t1.t2_id 
JOIN table3 t3 ON t3.id = t1.t3_id 
WHERE t3.field1 = 'param1' 
    AND (t1.field2 = 'param2' OR t1.field2 IS NULL) 
    AND t2.field1 = 'param3' 
    AND t2.id = 1 
+0

謝謝你,那個幫助,但我還有一個問題。我一直得到很多平等的條目(在我的情況85)。什麼是處理這個最好的方法?將DISTINCT添加到查詢中? – PrototypeX7

+0

是的,使用'SELECT DISTINCT'去除重複項。 – jarlh