我在使用休眠本機查詢的 Java7 應用程式中使用 Postgres 12.6。
我正在嘗試構建一個 SQL 陳述句,該陳述句從journalheader接收一個引數的表中讀取結果。引數值可以是'Matched'或'Unmatched'。
以下解決方案是不夠的,因為它不滿足null價值觀:
select * from journalheader where matched_status = ?1;
該表確實有一些行,其matched_status列為null。我希望這些行成為“不匹配”過濾器的一部分。
IE
- 如果引數
(?1)是'Matched',那么它將只回傳matched_status= 'Matched' 的行。 - 如果引數
(?1)是'Unmatched',那么它將只回傳matched_status= 'Unmatched' 或 null 的行。
問題
我還如何檢查這些null值?
可能的解決方案
我想我可能需要對引數值進行檢查,如果它是“不匹配” ,則包含or matched_status is null在陳述句中。我只是不確定如何檢查 sql 陳述句中引數的值。
select * from journalheader where matched_status = ?1 or <if ?1 equals 'Unmatched'> matched_status is null;
uj5u.com熱心網友回復:
您可以使用關鍵字COALESCE
select * from journalheader where COALESCE(matched_status, 'Unmatched') = ?1;
這意味著使用的值,matched_status除非值是null,如果值是,null則使用值Unmatched
uj5u.com熱心網友回復:
如果我正確理解您的問題,您可以嘗試使用 COALESCE
select *
from journalheader
where matched_status = COALESCE(?1,'Unmatched')
或情況下
select *
from journalheader
where matched_status =CASE WHEN ?1 is null THEN 'Unmatched' ELSE ?1 END
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/478870.html
標籤:爪哇 sql PostgreSQL
