我有一个mysql表结构如下:(对于英语句子学习系统): learn_status column
可以是 0
或者 1
. 3 practices columns
可以是 NULL
或者 -1
或者 0
或者 1
.
╔═════════════╦══════════════╦════════════╦════════════╦════════════╦════════╗
║ sentence_id ║ learn_status ║ practice_1 ║ practice_2 ║ practice_3 ║ others ║
╠═════════════╬══════════════╬════════════╬════════════╬════════════╬════════╣
║ 0 ║ 1 ║ NULL ║ NULL ║ NULL ║ more ║
║ 1 ║ 0 ║ 1 ║ 0 ║ 1 ║ more ║
║ 2 ║ 0 ║ -1 ║ NULL ║ 0 ║ more ║
║ 3 ║ 0 ║ NULL ║ NULL ║ NULL ║ more ║
║ 4 ║ 0 ║ 1 ║ 1 ║ 1 ║ more ║
╚═════════════╩══════════════╩════════════╩════════════╩════════════╩════════╝
我想得到有两个条件的句子:
学习状态应为0
所有3列不等于1。
(如果practice_1=1&practice_2=1&practice_3=1同时进行,则不应返回记录)
(如果其中一个等于1,则可以,然后应返回记录)
我使用以下mysql代码,但它不能正常工作: SELECT * FROM learnbox WHERE learn_status=0 AND NOT (practice_1=1 AND practice_2=1 AND practice_3=1)
它应该返回上表中的3条记录:句子\u id=(1&2&3)记录。
但是它只返回一个句子\u id=(1&2),不能正常工作。
谢谢
1条答案
按热度按时间dwbf0jvd1#
比较运算符
=
会回来的NULL
如果至少有一个操作数是NULL
. 所以对于sentence_id = 3
,你得到了NULL
对于所有三个练习场条件。也,
NOT NULL
是NULL
; 因此sentence_id = 3
,你的条件是什么TRUE AND NULL
,等于NULL
,因此该行不会出现。在mysql文档中查看有关操作符及其行为的更多详细信息。解决方案1:可以使用ifnull()函数来检查
NULL
从练习场返回条件,并将其设置为FALSE
.请尝试以下操作:
解决方案2:也可以使用空安全相等操作(
<=>
). 根据文件:空安全等于。此运算符执行与=运算符类似的相等比较,但如果两个操作数都为null,则返回1而不是null;如果一个操作数为null,则返回0而不是null。
因此,对于练习场条件,它将返回0。
您也可以尝试以下操作: