Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server-tsql连接/筛选问题_Sql_Sql Server_Tsql - Fatal编程技术网

SQL Server-tsql连接/筛选问题

SQL Server-tsql连接/筛选问题,sql,sql-server,tsql,Sql,Sql Server,Tsql,可能是标题错了,但我无法总结出我想要做的事情。这可能就是为什么我的谷歌搜索没有帮助 我有一个折扣列表,还有一个团队独家搜索列表(折扣,团队ID) 我调用一个传入@TeamID(int)的存储过程 我想要的是所有的折扣,除非他们在TeamExclusiveDiscounts中并且没有TeamID匹配的@TeamID 所以数据是这样的 表折扣: DiscountID Name ----------------------- 1 Test 1 2

可能是标题错了,但我无法总结出我想要做的事情。这可能就是为什么我的谷歌搜索没有帮助

我有一个
折扣列表
,还有一个
团队独家搜索列表
折扣,团队ID

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

我想要的是所有的
折扣
,除非他们在
TeamExclusiveDiscounts
中并且没有
TeamID
匹配的
@TeamID

所以数据是这样的

折扣

DiscountID     Name
-----------------------
1              Test 1
2              Test 2
3              Test 3
4              Test 4
5              Test 5
DiscountID     TeamID
-----------------------
1              10
2              10
2              4
3              8
teamexclusivediscont

DiscountID     Name
-----------------------
1              Test 1
2              Test 2
3              Test 3
4              Test 4
5              Test 5
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)。谢谢

您能试试这个吗?它只选择有团队折扣记录或根本没有团队折扣记录的记录

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
)

你能试试这个吗?它只选择有团队折扣记录或根本没有团队折扣记录的记录

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
)


我喜欢将英文描述直接翻译成SQL(至少是第一次): “所有折扣,除非他们在TeamExclusiveDiscounts中并且没有与@TeamID匹配的TeamID。”


我喜欢将英文描述直接翻译成SQL(至少作为第一步): “所有折扣,除非他们在TeamExclusiveDiscounts中并且没有与@TeamID匹配的TeamID。”


下一次添加你一直在挣扎的代码时,我没有打扰@Horaciux,因为它只是一堆杂乱的sql,我甚至觉得我还差一点。通常我会这样做。下次再添加你一直在挣扎的代码。我没有打扰@Horaciux,因为它只是一堆乱七八糟的sql,我甚至都不觉得我离它很近。通常我会这样做。谢谢,这确实有效,但会有一个“加入”的答案,因为它更简洁。感谢你的努力:)没关系。请注意,如果TeamExclusiveDiscovery中存在重复项,则加入将“重复计算”。但是如果你对折扣ID/TeamID有一个独特的限制,那就不会有问题了。谢谢,这确实有效,但是会有一个“加入”的答案,因为它更简洁。感谢你的努力:)没关系。请注意,如果TeamExclusiveDiscovery中存在重复项,则加入将“重复计算”。但如果您对折扣ID/TeamID有唯一的限制,这不会是一个问题。谢谢您的回复!这确实有效,我需要更好地将我的英语翻译成sql,正如你所建议的:)谢谢你的回复!这确实有效,我需要更好地将我的英语翻译成sql,正如您所建议的:)