我有两个名为“Item”(包含 ItemId 和 Title 列)和“ItemSpecificationValue”(包含 ItemId、ItemSpecificationValueId 列)的表。
(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”表中提取所有行,该表至少有一个来自 rangeA: {50,55} 的 ItemSpecificationValueId 和至少一个来自 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')