也许是错误的标题,但我不能概括我正在努力做的很好。这可能就是为什么我的googling没能帮上忙。
我有一个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 I应该得到折扣1,2,4,5TeamID = 5我应该得到4,5的折扣TeamID = 8我应该得到3,4,5的折扣我尝试过各种连接,或者试图更新临时表来设置是否允许折扣,但我似乎无法理解这个问题。
因此,我的存储过程的that将选择正确的折扣( Server)。谢谢!
发布于 2014-07-08 02:21:35
SELECT D.DiscountID FROM Discounts D
LEFT JOIN TeamExclusiveDiscount T
ON D.DiscountID=T.DiscountID
WHERE T.TeamID=@TeamID OR T.TeamID IS NULL发布于 2014-07-08 02:01:49
您能试一下吗?它只选择有团队折扣记录的记录,或者根本没有团队折扣记录。
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
)发布于 2014-07-08 02:56:05
我喜欢将英文描述直接翻译成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)
)https://stackoverflow.com/questions/24622469
复制相似问题