我已經構建了一個接口,用戶從數據庫中獲取記錄。用戶可以選擇指定0個或更多的過濾器。有四種過濾器A,B,C,d(讓我們說的這些都是在某個表中的字段)構建動態無失敗where子句
這裏是我的查詢應該是什麼樣子:
select * from table
where (A = v1 or B = v2 or C = v3) and D = v4
我想拿出一個辦法來制定查詢,而當指定了特定的過濾器時,則應用該查詢,否則將被忽略。但這應該適用於所有16個案例。
我已經能夠拿出迄今這些方法是:
select * from table
where (
(A = v1 and 1)
or (B = v2 and 1)
or (C = v3 and 1)
)
and D = v4
v1
或其它值設置爲-1未指定,當他們。因此,如果沒有指定它們,它們會被忽略,因爲使用另一個過濾器(來自A,B,C之間)。但是,在沒有指定A,B和C的情況下,這會失敗。在這種情況下,假使用D來結束,並且不應用D.
有沒有一種方法來與這種情況下的where子句?我也接受這個程序的解決方案,我通過代碼添加或不添加子句,但我更喜歡這種方式。我真的不想有很多if-else語句。
謝謝!
+1尼斯一個,複製這個想法告訴了我答案 – Andomar
所以,當A和B被指定,而C不是時,C = C給出了我的真實性,並且A或B或真實結果在A和B中沒有得到應用,所有的行都將被考慮。 –
@Caffeine Yeap。同意。我更新了SQL。我假設A,B,C是varchar字段。 –