Проверка нескольких столбцов на одно значение
У меня есть таблица с такими столбцами, например:
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
.
Есть ли более простой способ сделать то, что я хочу?
Ответы
Ответ 1
Вы можете использовать предикат IN
, например:
SELECT * FROM table WHERE 123 IN(col1, col2, col3, col4);
это противоположная версия 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)
Не уверен, что это "лучший способ", но он работает для меня.
Мысли?