2列之间的查询(数量层)

时间:2017-07-27 09:19:25

标签: mysql

我在数据库中有这样的数据

NULL

我认为Max_Qty超过30,因为没有最大数量。

因此,我使用此查询适用于NULL NULL,但SELECT Price_Per_Item FROM price WHERE '100' BETWEEN Min_Qty AND Max_Qty

不能正常工作
{{1}}

3 个答案:

答案 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;)

让我们首先看一下比较空值的规则:

  • NULL = NULL评估为未知
  • NULL&lt;&gt; NULL评估为未知
  • value = NULL评估未知
  • unknown AND true = unknown
  • unknown AND false = false
  • unknown OR true = true
  • unknown OR false = unknown

'100' BETWEEN Min_Qty AND Max_Qty被解释为'100' >= Min_Qty AND '100' <= Max_Qty

Max_Qtynull的情况下,'100' <= Max_Qty评估为未知。

'100' >= Min_Qty AND Unknown只能返回unknownfalse

使用coalesce将获取列表中的第一个非null变量。

答案 2 :(得分:-1)

您无法将空值与提供的值进行比较,因此您必须将值放在合并中以进行比较。例如: -

SELECT * 从产品 其中100在Min_Qty和COALESCE之间(Max_Qty,100);