查找具有一个值但没有其他值的 sql 记录
Posted
技术标签:
【中文标题】查找具有一个值但没有其他值的 sql 记录【英文标题】:Finding sql records that do have one value, but not others 【发布时间】:2014-06-19 17:13:36 【问题描述】:我有一个 sql 表,为了这篇文章的目的,我们会说它有 2 列,名称和值。有多个具有不同值条目的名称记录。在某些情况下,如果名称存在值,则还必须存在一组其他值。我试图确定这种情况不会发生的地方。例如,如果存在“combo”值,则必须存在“1”和“2”值才能处于正确状态。我正在尝试这样的查询:
Select Name
From Table
Where Value = "combo"
And Value Not Exists
(
Select Name
From Table
Where Value IN ("1", "2")
)
有更好的方法吗?
【问题讨论】:
【参考方案1】:select name
from table
where value in ('combo', '1', '2')
group by name
having count(distinct value) = 3
或
select name
from table
group by name
having sum(case when value = 'combo' then 1 else 0 end) = 1
and sum(case when value = 1 then 1 else 0 end) = 1
and sum(case when value = 2 then 1 else 0 end) = 1
【讨论】:
【参考方案2】:这将返回 combo
如果它存在于表中,但值 1
或 2
或两者都不存在。
select name
from table
where value = "combo"
and (
select count(distinct value)
from table
where value IN ("1", "2")
) < 2
【讨论】:
【参考方案3】:您的问题的一种解释是:
`forall name: exists (value = combo) => exists (value in (1,2))`
A => B
与 ~A or B
相同,并转换为 SQL 如下:
select distinct name from T T1
where not exists (
select 1 from T T2
where T2.name = T1.name
and T2.value = 'combo'
)
or exists (
select 1 from T T3
where T3.name = T1.name
and T3.value in (1,2)
);
这是你的意思吗?
【讨论】:
以上是关于查找具有一个值但没有其他值的 sql 记录的主要内容,如果未能解决你的问题,请参考以下文章
SQL Join 2个表,返回只存在1个值而没有其他值的记录