我有一個準備好的SQLite陳述句...
SELECT * FROM a WHERE col1 = $someValue
但是,當someValue是null該查詢回傳任何行,所以我寫了這個...
SELECT *
FROM a
WHERE (
col1 = $someValue OR
(
$someValue IS NULL AND
col1 IS NULL
)
)
該查詢完美的作品,無論someValue是null或不是,但它是非常冗長。有沒有更簡單或更簡潔的方法來實作相同的目標?
uj5u.com熱心網友回復:
如果您將使用postgres,那么is distinct from我想他們擁有它,因為許多人對您有感覺:
SELECT * FROM a WHERE col1 is not distinct from $someValue
使用sqlite應該可以這樣寫:
SELECT * FROM a WHERE col1 is $someValue OR col1 = $someValue
這可能就這么短了。
uj5u.com熱心網友回復:
來自運算子和影響決議的屬性:
IS 和 IS NOT 運算子的作業方式與 = 和 != 類似,除非其中一個或兩個運算元為 NULL。在這種情況下,如果兩個運算元都為 NULL,則 IS 運算子的計算結果為 1(真),IS NOT 運算子的計算結果為 0(假)。如果一個運算元為 NULL 而另一個不是,則 IS 運算子的計算結果為 0(假),IS NOT 運算子的計算結果為 1(真)。IS 或 IS NOT 運算式不可能計算為 NULL。
您也可以使用運算子IS來比較非空值:
SELECT * FROM a WHERE col1 IS $someValue;
uj5u.com熱心網友回復:
不像 forpas 的回答那么優雅,但另一個值得一提的選擇:
SELECT * FROM a WHERE ifnull(col1, 'x') = ifnull($someValue, 'x')
其中傳遞給ifnull函式的第二個引數(在本例中x)是資料庫中尚不存在的值,col1并且$someValue是 varchar 列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325079.html
標籤:sql sqlite 节点-sqlite3
