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 статьи.

Другие вопросы по тегам