选择具有特定值的记录,但如果有另一个则排除

时间:2015-08-17 08:19:49

标签: sql

所以我有这张桌子

Product_ID Client_ID
1          2
1          3
2          2
3          2

基本上我需要选择product_ID独有的client_id = 2。在我的情况下,它应该只返回2和3 product_ID,因为id = 1不是独占的并且有多个客户端设置。

3 个答案:

答案 0 :(得分:1)

这是怎么做的。

首先,让我们创建你的表。

create table SomeTable
(
    Product_ID int,
    Client_ID int
)
Go

insert into SomeTable values(1, 2)
insert into SomeTable values(1, 3)
insert into SomeTable values(2, 2)
insert into SomeTable values(3, 2)

以下脚本将返回只有一个 Product_ID值的所有Client_ID值的列表:

SELECT Product_ID
FROM SomeTable
GROUP BY Product_ID
HAVING COUNT(*) = 1

然后你将它作为一个子条款来获得你正在寻找的结果:

SELECT st.Product_ID
FROM SomeTable st,
(
    SELECT Product_ID
    FROM SomeTable
    GROUP BY Product_ID
    HAVING COUNT(*) = 1
) tmp (Product_ID)
WHERE tmp.Product_ID = st.Product_ID
and st.Client_ID = 2

这将为您提供您正在寻找的行结果(2和3)。

答案 1 :(得分:0)

试试这个:

Select product_id from ClientsProducts where client_id in (
Select client_ID from 
(select client_ID,count(product_id) from ClientsProducts
group by client_ID
having count(product_id)=1) a )

答案 2 :(得分:0)

使用COUNTHAVING

SELECT Product_ID
FROM ClientsProducts
GROUP BY Product_ID
HAVING COUNT(Product_ID) = 1

输出

Product_ID
2
3

SQL小提琴:http://sqlfiddle.com/#!3/841ba7/14/0