【发布时间】:2016-11-04 04:26:54
【问题描述】:
我有这一行的 MySQL 表:
+----------+--------+------+-------+
| list_uid | sku | qty | verif |
+----------+--------+------+-------+
| 49 | 024522 | 10 | 8 |
+----------+--------+------+-------+
我尝试用这个查询选择这一行:
SELECT
*
FROM
ae_rf_list_picked
WHERE
`qty` != 0 AND
IFNULL(`verif`, 0) < `qty` AND
`sku` = '024522' AND
`list_uid` = 49
我不明白为什么此查询不返回此行。 如果我删除这部分
IFNULL(
verif, 0) qty AND
查询返回行。
【问题讨论】:
-
列类型有哪些?引用手册:“IFNULL() 返回一个数字或字符串值,具体取决于使用它的上下文。” 现在,如果您使用
'8'(而不是8)进行此操作,您正在检查'8' < '10',这当然不是真的,因为字符串比较从左侧开始逐个字符地进行。 -
如果您使用字符串而不是整数,您需要了解
'8'是在'10'... 之后出现的 -
这里是 SQL fiddle,如果列是整数,一切正常:sqlfiddle.com/#!9/34c39c/1
-
如果您需要对其进行数学运算,请将其存储为数字。如果您永远不会对其进行数学运算,请将其存储为字符串。如果两者都需要,则需要两列。 qty 和 verif 的左对齐似乎暗示它们是文本
-
好的,谢谢!就像你说的 qty 和 verif 的字段类型是 TINYTEXT。我明白我需要做什么,但我不明白为什么 10 之后是 8。
标签: mysql