代表参数列表在sql中搜索数据,
您好,我无法在sql中创建查询,我想获取包含我传入参数的产品的所有员工 例如,如果我通过了产品id 11,12,则其应为仅退货发货男孩id 1和2;如果我通过了产品id 11,则其应为仅退货发货男孩id 1,2,3;如果我通过了产品id 11,12,16,则其应返回0记录,因为没有为产品id 11,12,16分配发货男孩代表参数列表在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
我不知道你的表叫什么,所以我叫它
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