我很難搞清楚如何提出這個問題,所以我直接轉到示例代碼。比方說,我有這些表:與一對多關係不存在的地方
create table Item
(
ItemId int identity(1,1),
Name nvarchar(256)
)
create table ItemSale
(
ItemSaleId int identity(1,1),
ItemId int,
Price decimal,
CategoryId tinyint
)
我想檢索是ItemSale
記錄是不是在給定的CategoryId
列表。至少對我而言,併發症是如果對於給定的Item
ItemSale
中存在記錄,我不希望看到有關該Item
的任何記錄。
所以,如果我有這樣的數據:
insert into Item(Name)
select N'Widget' union all
select N'Foo' union all
select N'Buzz'
insert into ItemSale(ItemId, Price, CategoryId)
select 1, 9.95, 1 union all
select 1, 19.95, 2 union all
select 3, 99.99, 3
而且CategoryId
我想篩選出爲1,那麼我不希望看到任何記錄ItemId
1(「窗口小部件」)。所以,用樣本數據,我只看到了ItemSale
記錄Item
ID爲3
我知道,我的解決方案很可能會涉及到某種NOT EXISTS
OR LEFT JOIN
但我與如何過濾掉所有的掙扎記錄而不僅僅是符合我的標準的特定記錄。我錯過了什麼?
SQLFiddle:http://sqlfiddle.com/#!3/79c58
如果類標識符是已在ItemSale,你不能找到一個項目(在項目表上)不在一個類別中,也不在ItemSale表中。您可以做的是查找不在ItemSale中的項目(在項目表上)。那是你要的嗎? –
@VitorTyburski我想找到ItemSale中沒有特定CategoryId記錄的項目,這有意義嗎? –
是的,並且@GarethD的回答是正確的。 –