2013-10-03 30 views
1

我試圖運行一個如下所示的代碼。這裏的子查詢從與主查詢相同的表中拉出 - 唯一的約束是column3是/不是NULL。 有什麼辦法可以簡化它嗎?簡化SQL查詢,而不是使用連接

SELECT a.column1, a.column2, b.column1, b.column2 
FROM table1 a 
INNER JOIN 
    (SELECT column1, column2 
    FROM table1 
    WHERE column3 IS NULL) b 
ON a.column4 = b.column4 
WHERE a.column3 IS NOT NULL 
GROUP BY a.column1, a.column2, b.column1, b.column2 
+0

在您的查詢中,您錯過了ON子句(在INNER JOIN中,您必須指定ON子句)。 –

+0

毫米對不起。我的意思是包括它。還有一種方法可以簡化它嗎? –

+0

簡化?在可讀性或性能方面?在性能方面 –

回答

2

您的編輯後:(查詢b表有沒有column4)

試試這個:

SELECT a.column1, a.column2, b.column1, b.column2 
FROM table1 a 
INNER JOIN table1 b 
ON a.column4 = b.column4 
WHERE a.column3 IS NULL 
AND b.column3 IS NOT NULL 

如果你認爲你有四列,您可以使用GROUP BY中重複或字段列表中的DISTINCT命令。

+0

嘿喬感謝您簡化它。我有一個問題:它是否仍然查詢table1兩次?如果是這樣,是否有辦法讓它跑得更快? –

+0

您必須查詢兩次table1,因爲您需要知道四個字段(a.column1,a.column2,b.column1,b.column2),其中前兩列尊重第3列的條件爲空,而其他兩個字段尊重條件第3列爲不爲空 –