SQL - ГДЕ (X, Y) IN (A, B)
У меня есть какая-то блокировка в настоящее время.
Мой теоретический запрос выглядит примерно так:
SELECT * FROM Table WHERE X in (a, b, c) AND Y IN (d, e, f)
В общем, я хочу, чтобы все строки имели несколько столбцов, что означает:
X, Y
1, 2
3, 4
5, 6
7, 8,
9, 10
Если я хочу получить все строки, где (X=1, Y=2)
или же (X=5, Y=6)
, так что X и Y взаимосвязаны, как бы я это сделал?
(MS SQL2005 +)
2 ответа
Почему не что-то простое, подобное следующему?
WHERE (X = 1 AND Y = 2) OR (X = 5 AND Y = 6) ...
Или, если вы ищете строки (на основе вашего примера), где Y должно быть X + 1, то:
WHERE Y = X + 1
Если у вас есть тысячи OR
предложения, подобные приведенным выше, тогда я бы предложил вам заполнить таблицу критериев заранее и переписать ваш запрос как объединение. Предположим, у вас есть такой стол Criteria(X, Y)
тогда ваш запрос станет намного проще:
SELECT Table.*
FROM Table
INNER JOIN Criteria ON Table.X = Criteria.X AND Table.Y = Criteria.Y
Не забудьте добавить индекс / внешние ключи по мере необходимости в новую таблицу.
Если по какой-либо причине вы предпочитаете не создавать таблицу раньше времени, вы можете использовать временную таблицу или переменную таблицы и заполнить ее в своей процедуре.
Если X и Y находятся в таблице, то JOIN будет наиболее чистым:
SELECT * FROM Table t
INNER JOIN XandY xy
WHERE tX = xy.X AND t.Y = xy.Y
Если бы не в таблице, я бы настоятельно рекомендовал положить их в один. IN
работает только с наборами с одним значением, и нет возможности выстроить результаты с использованием нескольких IN
статьи.