Подтвердить что ты не робот

Проверка нескольких столбцов на одно значение

У меня есть таблица с такими столбцами, например:

id,col1,col2,col3,col4

Теперь я хочу проверить, имеет ли значение ANY of col1, col2, col3, col4 значение переданное.

Длинный способ сделать это будет..

SELECT * FROM table WHERE (col1 = 123 OR col2 = 123 OR col3 = 123 OR col4 = 123);

Я предполагаю, что это противоположная версия IN.

Есть ли более простой способ сделать то, что я хочу?

4b9b3361

Ответ 1

Вы можете использовать предикат IN, например:

SELECT * FROM table WHERE 123 IN(col1, col2, col3, col4);

Демо-версия SQL Fiddle


это противоположная версия IN.

Нет, это не. Это то же самое, что использовать OR так, как вы делали в своем вопросе.


Чтобы прояснить это:

Предикат IN или установленное членство определяется как 1:

enter image description here

Где Value Expression может быть либо 2:

enter image description here

Итак, это хорошо сделать так, используя выражение выражения 123, которое является литералом.


1, 2: Изображения из: SQL-запросы для простых смертных (R): практическое руководство по манипулированию данными в SQL

Ответ 2

Вы можете сделать что-то вроде: (Примечание: Предполагая, что столбцы являются числовыми значениями. И просто добавьте конкатенированное значение, создайте последовательность символов, которую вы ищете, используйте разделитель, чтобы отличать значения столбца. Pipe (|) - это разделитель в этом примере.)

SELECT [ID]
    ,[Col1]
    ,[Col2]
    ,[Col3]
    ,[Col4]
FROM [Table1]
WHERE '123' IN (
    CAST([Col1] AS VARCHAR) + '|'
    + CAST([Col2] AS VARCHAR) + '|'
    + CAST([Col3] AS VARCHAR) + '|'
    + CAST([Col4] AS VARCHAR) + '|'
)

Ответ 3

У меня была аналогичная проблема и она была решена так: SELECT * FROM table WHERE col1 OR col2 IN(SELECT xid FROM tablex WHERE somecol = 3)

Не уверен, что это "лучший способ", но он работает для меня.

Мысли?