mysql: '哪里有东西!=true'排除带有 NULL 的字段
我有两个表,一个表中有组,另一个表设置了可以看到哪些组的用户限制。 当我执行 LEFT JOIN 且未指定任何条件时,它会显示所有记录。当我执行 WHERE group_hide.hide!='true' 时,它仅显示这些设置为 false 枚举类型的记录。通过 JOIN,其他组将隐藏字段设置为“NULL”。 我怎样才能使它只排除那些设置为 true 的内容,并显示其他所有 NULL 或 false 的内容?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在 MySQL 中,处理可为空值时必须使用
IS NULL
或IS NOT NULL
。这里你应该使用
(group_hide.hide IS NULL OR group_hide.hide != 'true')
In MySQL you must use
IS NULL
orIS NOT NULL
when dealing with nullable values.HEre you should use
(group_hide.hide IS NULL OR group_hide.hide != 'true')
唐已经对您提出的问题提供了很好的答案,并将解决您眼前的问题。
但是,让我解决数据类型域错误的问题。通常你会将
hide
设置为 BOOLEAN,但 mysql 并没有真正完全实现它。它将其转换为 TINYINT(1),允许值从 -128 到 127(请参阅 mysql 的数据类型)。由于 mysql 不支持 CHECK 约束,因此您可以选择使用触发器或外部引用来正确强制执行域。以下是错误数据域(您的情况)的问题,按重要性顺序排列:
Don already provided good answer to the question that you asked and will solve your immediate problem.
However, let me address the point of wrong data type domain. Normally you would make
hide
be BOOLEAN but mysql does not really implement it completely. It converts it to TINYINT(1) which allows values from -128 to 127 (see overview of data types for mysql). Since mysql does not support CHECK constraint you are left with options to either use a trigger or foreign reference to properly enforce the domain.Here are the problems with wrong data domain (your case), in order of importance:
一个明显的答案是:
我完全不确定空行为规则是什么。
an obvious answer would be:
I'm not sure off the top of my head what the null behaviour rules are.