mysql (5.1)> select * from database.table, где не foo (для всех полей) - PullRequest
2 голосов
/ 02 октября 2011

Я хочу выбрать все в таблице, где значение ячейки не равно foo. Я думал, что это будет что-то похожее на WHERE NOT NULL, например SELECT * FROM database.table WHERE NOT 'foo';, но это просто вернет заголовки столбцов без данных.

edit : я хочу сделать это без указания определенного столбца (NOT 'foo' для всех полей).

Ответы [ 3 ]

3 голосов
/ 02 октября 2011

Когда ответит @Jim Garrison, вы должны указать столбцы для сравнения значения 'foo'.В противном случае вы тестируете само постоянное значение, которое может быть либо ложным (ноль), либо истинным (ненулевым).

SELECT * FROM database.table WHERE NOT 'foo' не возвращает данных, поскольку 'foo' не является ложным постоянным значением.Поэтому NOT 'foo' имеет значение false для каждой строки в таблице, поэтому ни одна строка не совпадает, и результатом является пустой набор.

Джим дает один синтаксис для проверки каждого столбца по очереди.Вот еще один альтернативный синтаксис:

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

Однако я согласен с комментарием @Mosty Mostacho.В реляционной базе данных странно проверять одно значение по многим столбцам.Каждый столбец должен иметь различный логический тип атрибута, поэтому редко приходится искать похожее значение среди многих столбцов (не невозможно, но редко).

Обычно это означает, что вы используете повторяющиеся группы столбцов, что нарушает Первая нормальная форма .Вместо этого вам может потребоваться создать дочернюю таблицу, чтобы все значения, которые вы ищете, были в одном столбце или в нескольких строках.

3 голосов
/ 02 октября 2011

Нет способа сделать это без указания полей и условий, как в

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

В зависимости от того, что вы подразумеваете под

значение ячейки не foo

вам может потребоваться изменить and (ни один из столбцов в строке не соответствует условию) на or (хотя бы один столбец не соответствует условию).

0 голосов
/ 02 октября 2011

Кажется, что MySQL не достаточно сложен, чтобы сделать это.Вместо этого мне придется добавить if-test в мой цикл php для проверки на foo и прервать, если присутствует fooЯ не хотел этого делать, так как мне нужно разбираться в нескольких вложенных циклах перед проверкой значения ячейки ...

...