我正在構建一個 CRUD 應用程式,它允許用戶輸入一些搜索條件并獲取與這些條件相對應的檔案。不幸的是,根據用戶發送的輸入,我在使用不同條件的 postgres 中創建查詢時遇到了一些困難。
例如,如果用戶僅將檔案編號設定為搜索條件,則查詢的定義如下:
select * from document where document_num = "value1"
另一方面,如果用戶給出兩個條件,則查詢將設定如下:
select * from document where document_num = "value1" and reg_date = "value2"
如何設定對所有情況都有效的查詢?查看其他執行緒,我認為在 where 部分使用合并是一種可能的解決方案:
document_num = coalesce("value1", document_num)
這種方法的問題是,當沒有提供值時,postgres 會將條件轉換為 document_num IS NOT NULL,這不是我需要的(我的目標是將條件設定為始終為真)。
提前致謝
uj5u.com熱心網友回復:
因此,如果您有默認值,@D-shihCOALESCE的解決方案將起作用,您也可以按如下方式使用。
SELECT *
FROM document
WHERE document_num = COALESCE("value1", default_value)
AND reg_date = COALESCE("value2", default_value);
如果您沒有默認值,那么您可以使用創建查詢CASE WHEN(在這里我假設您有一些變數,您可以從中確定應用哪些條件,例如何時應用 document_num 或何時應用 reg_date 或何時應用兩者)。下面舉一個小例子。
SELECT *
FROM document
WHERE
(
CASE
WHEN "value1" IS NOT NULL THEN document_num = "value1"
ELSE TRUE
END
)
AND (
CASE
WHEN "value2" IS NOT NULL THEN reg_date = "value2"
ELSE TRUE
END
)
CASE WHEN 您可以在此處閱讀更多如何使用。
uj5u.com熱心網友回復:
如果我理解正確,您可以嘗試通過引數傳遞用戶輸入值。
引數默認值可能會設計為用戶無法通過,如果用戶不想使用該引數,它將使用默認值。
我們可以OR用來判斷是否使用引數,否則忽略它。
SELECT *
FROM document
WHERE (document_num = :value1 OR :value1 = [default value])
AND (reg_date = :value2 OR :value2 = [default value])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/463284.html
標籤:sql 数据库 PostgreSQL
上一篇:laravel中的查詢結果
