【问题标题】:Fetch the id associated with only the given list of values获取仅与给定值列表关联的 id
【发布时间】:2019-05-13 13:11:44
【问题描述】:

我有一个简单的表格说

customerid    clientid
----------------------
4567          1
5678          1
1298          2
4567          2
5678          2
4567          3 

我想获取只有客户 ID 列表的客户 ID,所以说
(4567,5678) 中的客户 ID 应为 1,
(4567) clientid 中的 cutomerid 应为 3

SELECT clientid 
FROM customer_client 
WHERE customerid IN (4567,5678) 
GROUP BY clientid 
HAVING COUNT(customerid) = 2

返回

clientid
---------
1
2

而我想要的只是

clientid
---------
1

【问题讨论】:

    标签: sql database db2


    【解决方案1】:

    试试这个-

    SELECT DISTINCT clientid
    FROM customer_client
    WHERE customerid IN (4567,5678) 
    
    EXCEPT 
    
    SELECT DISTINCT clientid
    FROM customer_client
    WHERE  customerid NOT IN (4567,5678)
    

    【讨论】:

    • 否 - 这是所有值。与我定义的问题相同。
    • @Ryan 脚本已更改。
    【解决方案2】:

    将条件移至having 子句。如果你没有重复,你可以这样做:

    SELECT cc.clientid
    FROM customer_client cc
    GROUP BY cc.clientid
    HAVING SUM(CASE WHEN cc.customerid IN (4567, 5678) THEN 1 ELSE 0 END) = COUNT(*) AND
           COUNT(*) = 2;
    

    【讨论】:

    • 完美!感谢磨坊戈登。
    • @Ryan。 . .您是否有理由不接受此答案?
    【解决方案3】:
    with t (customerid, clientid) as (values
      (4567, 1)
    , (5678, 1)
    , (1298, 2)
    , (4567, 2)
    , (5678, 2)
    , (4567, 3)
    )
    , l (customerid) as (values
    --4567, 5678
    --4567
    4567, 5678, 1298
    )
    select g1.clientid
    from (
      select t.clientid, count(1) cnt
      from t
      join l on l.customerid=t.customerid
      group by t.clientid
    ) g1
    join (
      select clientid, count(1) cnt
      from t 
      group by clientid
    ) g2 on g1.clientid=g2.clientid and g1.cnt=g2.cnt and g1.cnt=(select count(1) from l);
    

    您无需在选择语句中的相应 ID 列表中的任何位置指定客户 ID 的数量(可能与示例中的不同)。
    只是这些 ID 本身的列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-20
      • 2013-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多