gpt4 book ai didi

sql - 一对多关系不存在的地方

转载 作者:行者123 更新时间:2023-12-04 12:52:33 25 4
gpt4 key购买 nike

我很难弄清楚如何提出这个问题,所以我将直接转到示例代码。假设我有这些表:

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
)

我想要检索的是不在给定 CategoryId 中的 ItemSale 记录列表。复杂的是,至少对我来说,如果给定 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,那么我不想看到ItemId1(“Widget”)的任何记录。因此,对于该示例数据,我只会看到 ID 为 3 的 ItemItemSale 记录。

我知道我的解决方案很可能会涉及某种NOT EXISTS OR LEFT JOIN 但我正在努力解决如何过滤掉所有记录而不仅仅是符合我的标准的特定记录。我错过了什么?

SQLFiddle:http://sqlfiddle.com/#!3/79c58

最佳答案

我可能过度简化了您的问题,但我认为这可行:

SELECT  *
FROM ItemSale i
WHERE NOT EXISTS
( SELECT 1
FROM ItemSale i2
WHERE i.ItemID = i2.ItemID
AND i2.CategoryID = 1
);

Example on SQL Fiddle

关于sql - 一对多关系不存在的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23065038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com