2014-02-28 37 views
0

我有一個表格,其中包含以下信息。SQLite查詢可能不處於狀態

AreaDescription  AD 
------------------ 
Processing1   BB 
Geology   BC 
pilot   BB 

需要動態的方式找到,如果有一個在公元敵不過一組給定(「公元前」,「G」,「S」),它返回的所有記錄,否則只返回其在相匹配的那些給定組( 'BC', 'G', 'S')

select * from tblArea where AreaDescription like '%o%' and (AD in ('BC','G','S') or 1=1) 

我試圖上述SQL,其含有

(在( 'BC' AD, 'G', 'S')或1 = 1)

表示如果AD在('BC','G','S')中具有值,則返回它們,否則按照1 = 1條件返回所有內容。

但是這不起作用,因爲我認爲它的工作原理。

這裏我得到的所有行不僅包含'BC',所以我猜OR狀態不正確嗎?

有沒有一種方法可以做到這一點?使用SWITCH?

+0

SqlLite沒有任何程序語言。所以簡單地說,你不能用簡單的程序來完成它。你必須加入或結合兩個評估。但是你可以簡單地在你的代碼中編程。 – RMachnik

+0

'1 = 1'總是如此,如果你用'OR'把它與另一個條件結合起來,那麼顯然其他條件結果根本就不重要。 – CBroe

回答

1

就結合兩個查詢,並使用第二個EXISTS檢查,如果第一沒有匹配任何記錄:

SELECT * 
FROM tblArea 
WHERE AreaDescription LIKE '%o%' 
    AND AD IN ('BC', 'G', 'S') 
UNION ALL 
SELECT * 
FROM tblArea 
WHERE AreaDescription LIKE '%o%' 
    AND NOT EXISTS (SELECT 1 
        FROM tblArea 
        WHERE AreaDescription LIKE '%o%' 
        AND AD IN ('BC', 'G', 'S'))