代表参数列表在sql中搜索数据,

代表参数列表在sql中搜索数据,,sql,Sql,您好,我无法在sql中创建查询,我想获取包含我传入参数的产品的所有员工 例如,如果我通过了产品id 11,12,则其应为仅退货发货男孩id 1和2;如果我通过了产品id 11,则其应为仅退货发货男孩id 1,2,3;如果我通过了产品id 11,12,16,则其应返回0记录,因为没有为产品id 11,12,16分配发货男孩 我不知道你的表叫什么,所以我叫它dbo.Delivery。试试这个: ;with CTE as ( select distinct DeliveryBoyId --get

您好,我无法在sql中创建查询,我想获取包含我传入参数的产品的所有员工

例如,如果我通过了产品id 11,12,则其应为仅退货发货男孩id 1和2;如果我通过了产品id 11,则其应为仅退货发货男孩id 1,2,3;如果我通过了产品id 11,12,16,则其应返回0记录,因为没有为产品id 11,12,16分配发货男孩


我不知道你的表叫什么,所以我叫它
dbo.Delivery
。试试这个:

;with CTE as (
  select distinct DeliveryBoyId --get all the boys who delivered product 11
  from dbo.Delivery
  where ProductId = 11

  union all --combine the above results with the below

  select distinct DeliveryBoyId --get all the boys who delivered product 12
  from dbo.Delivery
  where ProductId = 12
)
select DeliveryBoyId
from CTE
group by DeliveryBoyId
having count(1) = 2 --get all the boys who appear twice in the above table, once for each product
如果要匹配其他产品,可以将其他产品ID添加到
CTE
部分

如果您希望为任意数量的产品提供单一解决方案,可以使用此解决方案(可能可读性稍差,但更简洁,更易于维护):


感谢您的回复,我尝试使用此查询,但我的要求没有完全满足,我只想获得同时分配了产品id 11和12的送货员id。如果我在(11,12)中传递了产品id,则返回给我分配了产品id 11的送货员12是否有产品表?更新了答案。我使用的是所谓的a,它允许您将一些数据收集到我调用的表中
CTE
,并在下一个语句中使用它。这代替了创建一个单独的临时表,还添加了一个嵌套表示例,这可能是一个简单但更难阅读的解决方案。很好,当您有机会让其他人找到时,请继续并将其标记为答案
select DeliveryBoyId
from (
  select distinct DeliveryBoyId, ProductId
  from dbo.Delivery
  where ProductId in (11, 12)
 ) s
group by DeliveryBoyId
having count(1) = 2 --number matches number of products you need to match