mysql:';哪里有东西=正确';排除带有NULL的字段

mysql:';哪里有东西=正确';排除带有NULL的字段,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,我有两个表,一个表中有组,另一个表中设置了查看哪些组的用户限制。 当我进行左连接并没有指定任何条件时,它会显示所有记录。当我在何处隐藏组时。隐藏!='true“它仅显示设置了false枚举类型的记录。使用JOIN,其他组将隐藏字段设置为“NULL”。 如何使其仅排除那些设置为true的值,并显示所有其他具有NULL或false的值?在MySQL中,在处理可空值时,必须使用IS NULL或IS NOT NULL 在这里您应该使用(group\u hide.hide为NULL或group\u hid

我有两个表,一个表中有组,另一个表中设置了查看哪些组的用户限制。 当我进行左连接并没有指定任何条件时,它会显示所有记录。当我在何处隐藏组时。隐藏!='true“它仅显示设置了false枚举类型的记录。使用JOIN,其他组将隐藏字段设置为“NULL”。
如何使其仅排除那些设置为true的值,并显示所有其他具有NULL或false的值?

在MySQL中,在处理可空值时,必须使用
IS NULL
IS NOT NULL


在这里您应该使用
(group\u hide.hide为NULL或group\u hide.hide!=“true”)

一个显而易见的答案是:

WHERE (group_hide.hide is null or group_hide.hide ='false')

我不太清楚什么是无效行为规则。

唐已经为你提出的问题提供了很好的答案,并将解决你眼前的问题

然而,让我谈谈错误的数据类型域。通常,您会将
hide
设置为布尔值,但mysql并没有完全实现它。它将其转换为TINYINT(1),允许值从-128到127(请参阅mysql的概述)。由于mysql不支持CHECK约束,您可以选择使用触发器或外部引用来正确地强制域

以下是错误数据域(您的案例)的问题,按重要性顺序排列:

  • 对于只能为1或0的字段,允许NULL的缺点是必须使用(true、false、NULL),顺便说一句,SQL中并没有完全实现这一点。这使得某些查询比需要的查询更复杂、更慢。如果可以使列不为NULL,请执行以下操作
  • 对于只能为1或0的字段使用VARCHAR的缺点是由于额外的I/O和更大的存储需求,查询速度较慢(如果某个字段是索引的一部分并影响备份的大小,则会减慢读取、写入速度,使索引变大;请记住,对于较小的表,如果单个字段的域不正确,则这些影响都不会明显,但如果数据类型始终设置得太大,或者如果该表的记录数过多,则这些影响将不会明显。)此外,您将始终需要将VARCHAR转换为1或0,以使用自然的mysql布尔运算符,从而增加查询的复杂性
  • mysql使用TINYINT的缺点(1)对于BOOL来说,RDBMS允许某些不应该允许的值,理论上允许在系统中存储无意义的值。在这种情况下,应用层必须保证数据的完整性,如果RDBMS保证完整性总是更好的,因为它可以保护您免受应用层和al中某些错误的影响所以数据库管理员可能会犯错误
请参见手册中的。