【问题标题】:SQL WHERE IS NULL or column = 'value'SQL WHERE IS NULL 或 column = 'value'
【发布时间】:2017-12-18 03:59:02
【问题描述】:

目前在使用 SQLite3 时遇到问题

SELECT item_id, SUM(qoh), MIN(price), MAX(price), item_size
FROM inventory
WHERE item_size IS NULL OR item_size = 'S';

上述查询不起作用,因为它只会返回 NULL 值而不是 S

SELECT item_id, SUM(qoh), MIN(price), MAX(price), item_size
FROM inventory
WHERE item_size = 'S'

上面显然返回S

SELECT item_id, SUM(qoh), MIN(price), MAX(price), item_size
FROM inventory
WHERE item_size = 'S'OR item_size IS NULL; 

以上只返回NULL

我正在尝试完成下面的等效操作,

SELECT item_id, SUM(qoh), MIN(price), MAX(price), item_size
FROM inventory
WHERE item_size IS NULL;

SELECT item_id, SUM(qoh), MIN(price), MAX(price), item_size
FROM inventory
WHERE item_size = 'S';

但在一个命令中, 由于WHERE column IS NULL OR column = 'value' 的性质,只返回NULL 或'value',因为null 的性质会影响算法,

是否有任何 SQL 法律允许我绕过 WHERE item_size IS NULL OR item_size = 'S'; 从根本上不起作用?

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    使用

    SELECT item_id, SUM(qoh), MIN(price), MAX(price), item_size
    FROM inventory
    WHERE coalesce(item_size, 'S') = 'S'
    GROUP BY  coalesce(item_size, 'S') -- will add nulls to S or
    -- GROUP BY  coalesce(item_size, 'null') - will add them as 'null' but filter them out by your where
    

    您的问题是,使用 sum 会隐含 group by - 并且 null 不能很好地与字符串分组 - 您必须明确地 group by 将合并后的值分组到 S

    【讨论】:

    • SELECT item_id, SUM(qoh), MIN(price), MAX(price), item_size FROM inventory WHERE coalesce(item_size, 'S') = 'S' GROUP BY coalesce(item_size, NULL) ;成功了,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多