我在数据库中有这样的数据
NULL
我认为Max_Qty
超过30,因为没有最大数量。
因此,我使用此查询适用于NULL
NULL
,但SELECT Price_Per_Item FROM price WHERE '100' BETWEEN Min_Qty AND Max_Qty
{{1}}
答案 0 :(得分:1)
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(price_per_item DECIMAL(5,2) NOT NULL PRIMARY KEY
,Min_Qty INT NOT NULL
,Max_Qty INT NULL
);
INSERT INTO my_table VALUES
(10.00,1,10),
(20.00,10,20),
(30.00,20,30),
(40.00,30,NULL);
SELECT *
FROM my_table
WHERE min_qty < 100
AND (max_qty > 100 OR max_qty IS NULL);
+----------------+---------+---------+
| price_per_item | Min_Qty | Max_Qty |
+----------------+---------+---------+
| 40.00 | 30 | NULL |
+----------------+---------+---------+
1 row in set (0.01 sec)
答案 1 :(得分:0)
尝试 SELECT Price_Per_Item FROM price WHERE&#39; 100&#39;合并(Min_Qty,&#39; 100&#39;)和合并(Max_Qty,&#39; 100&#39;)
让我们首先看一下比较空值的规则:
'100' BETWEEN Min_Qty AND Max_Qty
被解释为'100' >= Min_Qty AND '100' <= Max_Qty
在Max_Qty
为null
的情况下,'100' <= Max_Qty
评估为未知。
'100' >= Min_Qty AND Unknown
只能返回unknown
或false
。
使用coalesce将获取列表中的第一个非null变量。
答案 2 :(得分:-1)
您无法将空值与提供的值进行比较,因此您必须将值放在合并中以进行比较。例如: -
SELECT * 从产品 其中100在Min_Qty和COALESCE之间(Max_Qty,100);