我想编写一个查询,该查询返回具有2个不同值的行,例如:
这是我拥有的表格-表格名称为Deliveryschedulefruits
:
ContactId Fruit
-----------------
45166 apple
45168 apple
45169 apple
45166 orange
结果应为:
45166 apple
45166 orange
我自己尝试了一些解决方案,但无法得出所需的结果: 这是行不通的。我觉得应该
select *
from MOW_DeliveryScheduleFruits
where ContactId IN (select a.ContactId
from MOW_DeliveryScheduleFruits a
join MOW_DeliveryScheduleFruits b On b.ContactId = a.ContactId
And b.Fruit <> a.Fruit)
请帮助我。我似乎无法解决这个问题。
答案 0 :(得分:0)
尝试一下
select MOW_DeliveryScheduleFruits.*
from(
select ContactId
from MOW_DeliveryScheduleFruits
group by ContactId
having count(*)>1
) as doubles
inner join MOW_DeliveryScheduleFruits on MOW_DeliveryScheduleFruits.ContactId=doubles.ContactId
order by MOW_DeliveryScheduleFruits.ContactId, Fruit
子查询返回所需的所有ID。您可以阅读带有这些ID的水果。
我认为您的查询有问题是,如果每个contactID
的水果数超过2,它将返回双精度字。您需要使用distinct
。像这样。
select * from MOW_DeliveryScheduleFruits
where ContactId IN (
select distinct a.ContactId
from MOW_DeliveryScheduleFruits a
Join MOW_DeliveryScheduleFruits b
ON b.ContactId = a.ContactId AND b.Fruit <> a.Fruit
)
使用group by
比额外的join
更有效率。
答案 1 :(得分:0)
我只会使用exists
:
select f.*
from fruits f
where exists (select 1
from fruits f2
where f2.contactid = f.contactid and f2.fruit <> f.fruit
);
如果表很大,则可以最佳利用(contactid, fruit)
上的索引。