SQL:查找在给定品牌列表中拥有属性的所有用户。

时间:2017-12-13 21:40:27

标签: mysql sql sql-server

假设一个如下表格:

--------------------------------------------
| 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也是如此。

5 个答案:

答案 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');