SQL в предложении несколько столбцов
SELECT *
FROM Tabl tabb
WHERE (tabb.col1, tabb.col2) IN ( (1,2), (3,4))
Вышеописанное работает в Oracle, но я пытаюсь работать в проприетарном механизме SQL, который не поддерживает формирование запроса с несколькими столбцами в IN.
Я пытаюсь найти комбинации 1,2 и 3,4 в БД.
Пожалуйста, помогите мне с любыми альтернативами для достижения вышеизложенного.
Я ищу способы передачи списка значений для col1 и col2 из Java за один раз, поэтому "=" может не быть вариантом, так как для достижения вышеуказанного может потребоваться два оператора SQL.
3 ответа
Как насчет этого?
SELECT
*
FROM
Tabl tabb
WHERE
(tabb.col1 = 1 AND tabb.col2 = 2) OR
(tabb.col1 = 3 AND tabb.col2 = 4)
Вы могли бы сделать что-то вроде этого:
SELECT *
FROM Tabl tabb
inner join (
select 1 a, 2 b
union select 3, 4
) x
on tabb.col1 = x.a
and tabb.col2 = x.b
В случае числовых столбцов и предположения, что значения ограничены конкретным диапазоном, большее количество значений может быть упаковано в одно число с использованием некоторой формулы
например, предположим, что значения col1 и col2 составляют от 1 до 1000 формулы
N = 10000 * col1 + col2
может быть использован, и в примере выбор будет
SELECT * FROM Tabl tabb WHERE (10000 * tabb.col1 + tabb.col2) IN ( 10002, 30004)
В общем случае конкатенация строк может использоваться для объединения нескольких значений столбцов, например
SELECT * FROM Tabl tabb WHERE (tabb.col1||"&"||tabb.col2) IN ( "1&2", "3&4")