MySQL (5.1) >从 database.table 中选择 *,其中不是 foo(在所有字段上)



我想选择表格中单元格值不是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存在时中断。我不想这样做,因为在测试单元格的值之前,我必须进入几个嵌套循环…

相关内容

最新更新