“选择”语句以获取记录

时间:2018-01-12 22:46:56

标签: sql oracle

需要SQL select语句帮助

ClientId    BenefitType
1000        1
1001        1
1001        2
1003        2
1003        3
1004        1
1004        3

我想只选择那些拥有BenefitType = 1但没有其他BenefitType的ClientsIds,因为ClientId不是此表中的唯一ID,并且可以有多行。所以在上面的例子中,答案应该是1000。

有四种不同类型的好处。客户可以拥有它们的任意组合。我试图只选择那些只有一个特定类型的好处的客户。假设福利类型为1,2,3,4。我想选择BenefitType=2没有任何其他好处的客户,即134

我正在使用Oracle,该表有大约600万条记录。有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:1)

在澄清您的问题后,请按照以下步骤操作:

select * 
from tableA
where BenefitType = 1
and ClientId not in (select ClientId 
                     from tableA 
                     where BenefitType != 1)

输出:

ClientId | BenefitType
1000     | 1

您可以在此处查看:http://sqlfiddle.com/#!4/b4657/2

答案 1 :(得分:0)

在MySQL中

SELECT ClientId
FROM tablename
WHERE BenefitType = 1
LIMIT 1;

在Oracle中

SELECT ClientId
FROM tablename
WHERE BenefitType = 1
AND ROWNUM = 1;

此外,添加以下行以获取最小ID

ORDER BY ClientId ASC;