it-swarm.com.ru

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

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

id,col1,col2,col3,col4

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

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

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

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

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

38
Brett

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

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

SQL Fiddle Демо


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

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


Чтобы уточнить это:

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

enter image description here

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

enter image description here

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


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

93
Mahmoud Gamal

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

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) + '|'
)
2
Dionicio Gonzalez

У меня была похожая проблема, и я решил ее следующим образом: SELECT * FROM table WHERE col1 OR col2 IN(SELECT xid FROM tablex WHERE somecol = 3)

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

Мысли?

1
Milk Man