簡體   English   中英

where子句基於條件

[英]where clause based on conditions

我有一個查詢,我匹配一列。 要匹配的值可以為null或不為null(存在某個值)。 匹配發生時會出現問題。 如果值存在,則匹配為

table.column = somevalue

工作正常,但如果值為null,則匹配需要完成

table.column is null

有沒有什么方法可以根據值選擇WHERE子句中使用的條件?

提前致謝

ORing你的WHERE子句怎么樣?

SELECT
*
FROM table
WHERE ((table.column = 123) AND table.column IS NOT NULL))
OR    (table.column IS NULL)

使用CASE語句,例如:

SELECT
  CASE
    WHEN mycol IS NULL
      THEN 'it is null'
    WHEN mycol = 'foo'
      THEN 'it is foo'
    ELSE 'it is something else'
  END AS col
FROM mytable;

(注意:我不知道你使用的是什么數據庫,所以上面可能需要“IS NULL”,“ISNULL”,“ISNULL()”)

檢查MySQL 控制流功能

嘗試使用ISNULL(somevalue,0)。 前提是您的“somevalue”table.column沒有0是有效值。 您可以使用任何在table.column中永遠不會顯示為有效值的字符串/數字,而不是0

在ms sql中你可以做到

      declare @match int
      select * from tbl where coalesce(tblValue, @match) = @match

這樣,當tblValue為null時,您將比較@match與自身。

當然,如果參數為null,則可以通過切換匹配來消除該參數

      select * from tbl where tblValue = coalesce(@match, tblValue) 

但后一個查詢可能導致查詢優化器忽略tblValue上的索引,因此您應該檢查執行計划。

我使用decode和case語句來解決這個問題這已經在oracle中完成了。


    AND DECODE(TSBI.SHIP_TRAIL_STATUS, 
               'L', 
               'TRUE', 
               'C', 
               (SELECT CASE 
                    WHEN TSBI.UPD_ON + 10 >= SYSDATE THEN 
                         'TRUE' 
                     ELSE 
                          'FALSE' 
                      END 
                FROM DUAL)) = 'TRUE'

在這種情況下,我檢查了SHIP_TRAIL_STATUS。 如果它返回'L',則解碼函數返回TRUE。 如果它返回'C',則解碼檢查UPD_ON值。 因此,此CASE語句返回TRUE或FALSE。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM