mysql(5.1)> select * from database.table where foo(on all fields)

时间:2011-10-01 22:21:53

标签: mysql where

我想在表格中选择单元格值不是foo的所有内容。我认为它类似于WHERE NOT NULL,类似于SELECT * FROM database.table WHERE NOT 'foo';,但只返回没有数据的列标题。

编辑:我想这样做,不用指定特定列(NOT 'foo'用于所有字段。)

3 个答案:

答案 0 :(得分:3)

如果没有指定字段和条件,就没有办法做到这一点,如

select * from table where
    col1 != value and
    col2 != value and
    ...

取决于您的意思

  

单元格的值不是foo

您可能需要将and(一行中的所有列都不符合条件)更改为or(至少有一列与条件不匹配)。

答案 1 :(得分:3)

当@Jim Garrison回答时,您必须指定列来比较您的'foo'值。否则你自己测试一个常量值,可以是假(零)或真(非零)。

SELECT * FROM database.table WHERE NOT 'foo'不返回任何数据,因为'foo'是非假常数值。因此,对于表中的每一行,NOT 'foo'都为false,因此没有行匹配,结果为空集。

Jim提供了一种依次测试每个列的语法。这是另一种替代语法:

SELECT * FROM database.table WHERE 'foo' NOT IN (column1, column2, column3, ...)

但是,我同意@Mosty Mostacho的评论。在关系数据库中,测试多列上的单个值是很奇怪的。每列应该是不同的逻辑类型的属性,因此在许多列中寻找类似的值并不常见(不是不可能,但不常见)。

这通常意味着您正在使用重复列列,这违反了First Normal Form。相反,您可能需要创建子表,以便您搜索的所有值都在多个行的单个列中。

答案 2 :(得分:0)

似乎MySQL不够复杂,无法做到这一点。相反,我必须在我的php循环中添加一个if-test以检查foo并在foo出现时中断。我不想这样做,因为在测试单元格的值之前我必须进入几个嵌套循环...