SQL WHERE是NULL或column ='value'

问题描述 投票:0回答:1

目前使用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效应算法的性质,只返回NULL或'value',

我有没有任何过于/未知的SQL法律允许我绕过WHERE item_size IS NULL OR item_size = 'S';从根本上不起作用?

sql sqlite
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.