我想选择表格中单元格值不是foo
的所有内容。我认为这将是类似于WHERE NOT NULL
的东西,如SELECT * FROM database.table WHERE NOT 'foo';
,但只是返回没有数据的列标题。
edit:我想这样做没有指定一个特定的列(NOT 'foo'
为所有字段)。
如果不指定字段和条件,就无法做到这一点,如
select * from table where
col1 != value and
col2 != value and
...
取决于
是什么意思单元格的值不是foo
您可能需要将and
(一行中所有列都不符合条件)更改为or
(至少有一列不符合条件)
@Jim Garrison回答,您必须指定要比较'foo'值的列。否则,你是在测试一个常量值本身,它可以是false(零)或true(非零)。
SELECT * FROM database.table WHERE NOT 'foo'
不返回数据,因为'foo'
是非假常量值。因此,NOT 'foo'
对表中的每一行都为假,因此没有行匹配,结果为空集。
Jim给出了一种依次测试每个列的语法。下面是另一种语法:
SELECT * FROM database.table WHERE 'foo' NOT IN (column1, column2, column3, ...)
然而,我同意@Mosty Mostacho的评论。在关系数据库中,在许多列上测试单个值是很奇怪的。每一列应该是一个不同的逻辑类型的属性,所以在许多列中寻找相似的值是不常见的(不是不可能,但不常见)。
这通常意味着您正在使用重复列的组,这违反了第一范式。相反,您可能需要创建一个子表,以便您正在搜索的所有值都在多个行中的单列中。
MySQL似乎还不够成熟,无法做到这一点。相反,我必须在我的php循环中添加一个if-test来检查foo
,并在foo
存在时中断。我不想这样做,因为在测试单元格的值之前,我必须进入几个嵌套循环…