Sql server 如何根据一条记录上的失败条件消除所有分组记录
我经常遇到这样一个问题:需要的查询不仅要删除一条不符合条件的记录,还要删除基于其他分组的所有记录。例如,对于具有以下内容的表:Sql server 如何根据一条记录上的失败条件消除所有分组记录,sql-server,Sql Server,我经常遇到这样一个问题:需要的查询不仅要删除一条不符合条件的记录,还要删除基于其他分组的所有记录。例如,对于具有以下内容的表: Name ProdType Prod Spoiled DateReceived Jack Fruit Apple N 1/1/2019 Jack Fruit Pear Y 1/1/2018 Jack Fruit Orange N
Name ProdType Prod Spoiled DateReceived
Jack Fruit Apple N 1/1/2019
Jack Fruit Pear Y 1/1/2018
Jack Fruit Orange N 1/1/2019
Jack Vegetable Okra N 1/1/2019
Jack Vegetable Squash N 1/1/2018
Jill Fruit Apple N 4/1/2019
Jill Fruit Cherry N 4/1/2019
Jill Vegetable Corn Y 4/1/2019
Jill Vegetable Okra N 4/1/2019
我的问题可能是寻找谁吃了什么水果,而这些水果都没有变质
到目前为止,我一直在使用嵌套的select语句,但随着我添加条件,它变得越来越困难
SELECT NAME
,PRODTYPE
,PROD
,SPOILED
,DATEREC
FROM inventory
WHERE NAME in (
SELECT DISTINCT Name from (SELECT Name FROM inventory
WHERE ProdType = 'fruit' as Data)
WHERE Name NOT IN (SELECT Name from inventory WHERE Name in (
SELECT Name
WHERE Spoiled = 'Y'))
)
在Jack和Jill的示例中,我的查询将为Jill返回2个结果(每个水果返回1个),而为Jack返回一个结果
通常至少涉及两个表。我在添加条件时遇到了一些问题(通常没有结果,或者我甚至无法通过错误来运行查询),例如,如果在X日期之前收到了条件,并且在添加其他表时,如果条件被破坏了,也可以
这种嵌套选择的方法是创建列表,然后进行搜索,还是SQL提供了更好的方法
谢谢。不存在:
select i.*
from inventory i
where
i.prodtype = 'Fruit' and
not exists (
select 1 from inventory
where name = i.name and
prodtype = 'Fruit' and
spoiled = 'Y'
)
不存在以下情况:
select i.*
from inventory i
where
i.prodtype = 'Fruit' and
not exists (
select 1 from inventory
where name = i.name and
prodtype = 'Fruit' and
spoiled = 'Y'
)
有许多创造性的方法可以用SQL表示查询。您的示例也可以通过这种方式实现,例如:
SELECT
name,
prodtype,
prod,
spoiled,
daterec
FROM
inventory
WHERE
prodtype = 'Fruit' AND
name NOT IN (SELECT name
FROM inventory
WHERE prodtype = 'Fruit' AND spoiled = 'Y')
要确定正确的(或至少是可以接受的)道路需要大量的练习。对于特定的数据请求,通常没有“标准”解决方案。在某些情况下,如果某个需求发生了变化,而该变化不适合现有的查询结构,则完全需要重新设计/重写查询。有许多创造性的方法可以用SQL表达查询。您的示例也可以通过这种方式实现,例如:
SELECT
name,
prodtype,
prod,
spoiled,
daterec
FROM
inventory
WHERE
prodtype = 'Fruit' AND
name NOT IN (SELECT name
FROM inventory
WHERE prodtype = 'Fruit' AND spoiled = 'Y')
要确定正确的(或至少是可以接受的)道路需要大量的练习。对于特定的数据请求,通常没有“标准”解决方案。在某些情况下,如果单个需求发生变化,而该变化不适合现有的查询结构,则您完全需要重新设计/重写查询。请添加预期输出示例数据的预期结果是什么?对不起,我的问题中隐藏了这一点,但是我预计Jill的两种水果的结果都是2条记录,因为两种水果都没有变质。请添加预期输出您希望样本数据的结果是什么?对不起,这是我的问题,但我预计Jill的结果是她吃的两种水果各有两个记录,因为两种水果都没有变质。你还需要关联
Prod
,我想为什么?所有输入“水果”的行都将被返回。是的,在二读时,我想你不会这样做。我以为这样做的目的是为了让那个人回到没有那种变质水果的地方。但这并不正确,我很兴奋能尝试这个。我会让你知道发生了什么。你还需要关联Prod
,我想为什么?所有输入“水果”的行都将被返回。是的,在二读时,我想你不会这样做。我以为这样做的目的是为了让那个人回到没有那种变质水果的地方。但这并不正确,我很兴奋能尝试这个。我会告诉你发生了什么。