可能是错误的标题,但我无法总结我想要做的很好的事情。这可能就是为什么我的谷歌搜索没有帮助。
我有Discounts
的列表,以及TeamExclusiveDiscounts
(DiscountId, TeamId
)
我调用传入@TeamID (int)
的存储过程。
我想要的是所有Discounts
,除非他们在TeamExclusiveDiscounts
并且没有TeamID
匹配@TeamId
。
所以数据类似于
表Discount
:
DiscountID Name
-----------------------
1 Test 1
2 Test 2
3 Test 3
4 Test 4
5 Test 5
表TeamExclusiveDiscount
:
DiscountID TeamID
-----------------------
1 10
2 10
2 4
3 8
预期结果:
TeamID = 10
我应该获得折扣1,2,4,5 TeamID = 5
我应该获得折扣4,5 TeamID = 8
我应该获得折扣3,4,5 我尝试了各种联接,或尝试更新临时表来设置是否允许折扣,但我似乎无法理解这个问题。
所以我在我的存储过程的T-SQL之后选择了正确的折扣(SQL Server)。谢谢!
答案 0 :(得分:2)
SELECT D.DiscountID FROM Discounts D
LEFT JOIN TeamExclusiveDiscount T
ON D.DiscountID=T.DiscountID
WHERE T.TeamID=@TeamID OR T.TeamID IS NULL
答案 1 :(得分:1)
你可以尝试一下吗 - 它只会选择团队中有团队折扣记录的记录,或者根本不选择团队折扣记录。
SELECT * FROM Discounts D
WHERE
EXISTS (
SELECT 1
FROM TeamExclusiveDiscount T
WHERE T.DiscountID = D.DiscountID
AND TeamID = @TeamID
)
OR
NOT EXISTS (
SELECT 1
FROM TeamExclusiveDiscount T
WHERE T.DiscountID = D.DiscountID
)
答案 2 :(得分:1)
我喜欢将英文描述直接翻译成SQL(至少作为第一遍): “所有折扣除非他们在TeamExclusiveDiscounts中,并且没有TeamID匹配@TeamId。”
SELECT *
FROM Discounts D -- All Discounts
WHERE D.DiscountID NOT IN -- except if they're in TeamExclusiveDiscounts
(SELECT T.DiscountID
FROM TeamExclusiveDiscount T
WHERE T.DiscountID NOT IN -- and don't have TeamID matching @TeamId.
(SELECT Match.DiscountID
FROM TeamExclusiveDiscount Match
WHERE Match.TeamID = @TeamID)
)