說我有以下簡單的表格SQL服務器:從第一次查詢的空行集二次查詢
表 { ID INT, 點名INT, 狀態INT, 值INT }
id pointId state value
-------------------------------
1 1 2 xxxxx
2 3 2 xxxxx
3 3 2 xxxxx
4 3 1 xxxxx
以下兩個疑問:
SELECT * FROM a WHERE state = 1 and pointId = x
SELECT * FROM a WHERE state = 2 and pointId = x
有沒有一種方法來合併這兩個查詢,以便:
- 如果查詢1點返回> 0的行,它返回從查詢結果1
- 如果查詢1返回0行,它返回從查詢結果2
(所以點名= 1,它將返回第1行中,點名= 3,它將返回第4行)
我一直在試圖將兩個與工會做這樣的事情
結合SELECT * FROM a WHERE state = 1 AND pointId = x
UNION ALL
SELECT * FROM a WHERE state = 2 AND pointId = x and
pointId NOT IN (SELECT pointId FROM a WHERE state = 1 AND pointId = x)
我想知道如果我正在使這種方式變得複雜,如果有更簡單的方法。我意識到我可以運行第一個查詢,然後在我的代碼中處理它,但如果我可以在sql中執行此操作,那將非常好。 任何建議或指針會很好!
感謝,
一個
你不應該在這種情況下使用UNION。您不想將記錄組合起來 - 您正在尋找基於'EXISTS'處理查詢1或查詢2。 – JonH 2012-01-30 19:48:45