首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server SQL联接/筛选问题

Server SQL联接/筛选问题
EN

Stack Overflow用户
提问于 2014-07-08 01:42:51
回答 3查看 47关注 0票数 1

也许是错误的标题,但我不能概括我正在努力做的很好。这可能就是为什么我的googling没能帮上忙。

我有一个Discounts列表和一个TeamExclusiveDiscounts (DiscountId, TeamId)列表

我调用传入@TeamID (int)的存储过程。

我想要的是所有的Discounts,除非它们在TeamExclusiveDiscounts中,并且没有TeamID匹配的@TeamId

所以这些数据就像

Discount

代码语言:javascript
复制
DiscountID     Name
-----------------------
1              Test 1
2              Test 2
3              Test 3
4              Test 4
5              Test 5

TeamExclusiveDiscount

代码语言:javascript
复制
DiscountID     TeamID
-----------------------
1              10
2              10
2              4
3              8

预期成果:

  • 搜索TeamID = 10 I应该得到折扣1,2,4,5
  • 搜索TeamID = 5我应该得到4,5的折扣
  • 搜索TeamID = 8我应该得到3,4,5的折扣

我尝试过各种连接,或者试图更新临时表来设置是否允许折扣,但我似乎无法理解这个问题。

因此,我的存储过程的that将选择正确的折扣( Server)。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-08 02:21:35

代码语言:javascript
复制
SELECT D.DiscountID FROM Discounts D
   LEFT JOIN TeamExclusiveDiscount T
     ON D.DiscountID=T.DiscountID
WHERE T.TeamID=@TeamID OR T.TeamID IS NULL

测试用SQLFIDDLE

票数 2
EN

Stack Overflow用户

发布于 2014-07-08 02:01:49

您能试一下吗?它只选择有团队折扣记录的记录,或者根本没有团队折扣记录。

代码语言:javascript
复制
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
)
票数 1
EN

Stack Overflow用户

发布于 2014-07-08 02:56:05

我喜欢将英文描述直接翻译成SQL (至少第一遍是这样):“所有折扣,除非是在TeamExclusiveDiscounts中,而且没有TeamID匹配@TeamId。”

代码语言:javascript
复制
  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)
         )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24622469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档