У меня есть две таблицы с именем «Item» (с столбцами ItemId и Title) и «ItemSpecificationValue» (с столбцами ItemId, ItemSpecificationValueId).SQL Server - выбор строк со значениями в двух разных диапазонах для одного и того же столбца
(Item Table)
ItemId | Title
1 | abcd
2 | pqrs
3 | uvwx
(ItemSpecificationValue Table)
ItemId | ItemSpecificationValueId
1 | 11
2 | 50
2 | 55
2 | 115
3 | 11
3 | 163
Скажем, я нужен, чтобы извлечь все строки из «Item» таблицы, которая имеет, по меньшей мере, один из ItemSpecificationValueId рангея: {50,55} и, по меньшей мере, один из rangeB: {11,115,163}. Таким образом, вы видите, что единственным предметом, который удовлетворяет вышеуказанному требованию, является тот, у которого есть ItemId 2.
Моя работа до сих пор такова, как показано ниже. Я хочу знать, есть ли какой-либо простой способ сделать это, кроме принятия союза, потому что я могу получить большое количество этих диапазонов, поэтому невозможно сделать большое количество правильных объединений. Я мог бы сохранить результат правого соединения на временной таблице. Просто интересно, есть ли более умный способ.
SELECT Item.ItemId, Item.Title
FROM Item
RIGHT JOIN ItemSpecificationValue
ON ItemSpecificationValue.ItemId = Item.ItemId
WHERE ItemSpecificationValue.ItemSpecificationValueId in ('50','55')
INTERSECT
SELECT Item.ItemId, Item.Title
FROM Item
RIGHT JOIN ItemSpecificationValue
ON ItemSpecificationValue.ItemId = Item.ItemId
WHERE ItemSpecificationValue.ItemSpecificationValueId in ('11','115','163')
Awesome! Спасибо, sgeddes !! –
@ChamzDes - np, рад, что я мог бы помочь! – sgeddes