2014-07-08 43 views
1

可能是錯誤的標題,但我不能總結我想要做的很好。這可能是爲什麼我的谷歌搜索沒有幫助。SQL Server - tsql加入/過濾問題

我有Discounts列表,以及TeamExclusiveDiscountsDiscountId, 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

下一次添加您一直在努力的代碼。 – Horaciux

+0

我沒有打擾@Horaciux,因爲它只是一堆亂糟糟的sql,而我並不覺得自己更接近。通常我會。 – Jen

回答

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 
) 
+0

謝謝你這樣做,但會隨着「加入」的答案,因爲它更加緩和。欣賞努力,雖然:) – Jen

+1

那沒關係。請注意,如果TeamExclusiveDiscount中存在重複項,則聯接將「雙重計數」。但是如果你對DiscountID/TeamID有一個獨特的約束,那就不成問題了。 –

1

我要翻譯的英文說明直接進入SQL(ATLEAST作爲第一通): 「除非他們在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) 
     ) 
+0

感謝您的回覆!這確實有用,而且我確實需要更好地將我的英文翻譯成sql,正如你所建議的那樣:) – Jen