假设一个如下表格:
--------------------------------------------
| UserID | PropertyId | BrandId |
--------------------------------------------
| 1111 | xx1111 | A |
| 1111 | xx1112 | A |
| 1111 | xx1113 | B |
| 2222 | xx1114 | C |
| 3333 | xx1115 | B |
| 3333 | xx1116 | C |
| 4444 | xx1117 | B |
--------------------------------------------
如何找到仅在品牌A和B中而不在C,D,E等中具有属性的所有用户的列表。
所以,我的查询应该返回如下内容:
---------------
| UserID |
---------------
| 1111 |
| 4444 |
---------------
用户1111的所有属性都是品牌A和B.用户2222在C中具有属性,用户3333也是如此。
答案 0 :(得分:1)
这应该有效:
SELECT DISTINCT UserID FROM table WHERE UserID NOT IN
(
SELECT UserID FROM table WHERE BRANDID NOT IN('A','B')
)
答案 1 :(得分:1)
我认为这是你所说的最直接的翻译:
select user_id
from user_property_brand
where brand_id in ('A', 'B')
except
select user_id
from user_property_brand
where brand_id in ('C', 'D', 'E');
它也给出了正确答案:
user_id
---------
1111
4444
(2 rows)
答案 2 :(得分:0)
SELECT DISTINCT USERID FROM USER WHERE BRANDID IN ('A','B') AND BRANDID NOT IN ('C')
答案 3 :(得分:0)
SELECT DISTINCT t.UserID
FROM @t t
WHERE t.BrandId IN ('A','B')
AND NOT EXISTS (
SELECT 1
FROM @t x
WHERE t.UserID = x.UserID
AND x.BrandId IN ('C','D', 'E')
HAVING COUNT(DISTINCT BrandID) >= 1
)
答案 4 :(得分:0)
我希望这段代码适合你。
Select distinct(userId)
from table
where brandId in ('A') and brandId in ('B') and brandId not in ('C');