我在表格中得到了这样的行:
PRODUCTID | NAME | LOCATION | PRICE
1 X R 5
1 X C 4.5
2 Y R 5
3 Z C 4.5
如您所见,表可以包含相同的产品,但位于不同的位置。所有产品都位于“R”位置,但有时产品可能同时位于 R 和 C 位置,但价格不同。
我想要的是,如果一种产品同时位于位置 R 和 C,则仅获取位置 C,但如果它仅位于 R 位置,则仅获取位置 R。
我怎样才能做到这一点?
我尝试过使用子查询:
SELECT *
FROM ProductLocation t
WHERE EXISTS (
SELECT *
FROM ProductLocation
WHERE
LOCATION not in ('R')
)
and t.PRODUCTID='1'
最佳答案
可能最有效的方法是:
select pl.*
from ProductLocation pl
where pl.location = 'C'
union all
select pl.*
from ProductLocation pl
where pl.location = 'R' and
not exists (select 1
from ProductLocation pl2
where pl2.productId = pl.productId and
pl2.location = 'C'
);
为了提高性能,您需要在 ProductLocation(location)
和 ProductLocation(productId, location)
上建立索引。
关于sql - 如何在单个选择中区分具有相似值的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30384732/