没有值的SQL查找组

时间:2019-03-04 21:51:29

标签: sql-server

我正在尝试找到一些按ID分组的数据,例如

Create Table FormFields (Label varchar(100), FormId int)
Insert Into FormFields Values ('First Name', 1)
Insert Into FormFields Values ('Last Name', 1)
Insert Into FormFields Values ('Email', 1)

Insert Into FormFields Values ('First Name', 2)
Insert Into FormFields Values ('Last Name', 2)
Insert Into FormFields Values ('Email', 2)
Insert Into FormFields Values ('Phone', 2)

Insert Into FormFields Values ('Email', 3)
Insert Into FormFields Values ('Phone', 3)
Insert Into FormFields Values ('Birthday', 3)

但是我正在尝试查找“组”(具有相同ID的数据)没有“名字”和“姓氏”条目的所有实例

我尝试过:

select distinct Label, FormId 
from FormFields
where Label not in
(
    select distinct Label
    from FormFields
    where Label= 'First Name' or Label= 'Last Name'
)
order by FormId 

但是,这仅给出了其他字段而没有引用,以查看是否确实存在名字和姓氏。

我所需的输出仅显示ID = 3的Formfields,因为该组(列出的ID为3的项目)没有“ First Name”和“ Last Name”的条目

感谢您的帮助,即使可能,也非常困惑。

2 个答案:

答案 0 :(得分:1)

感谢您提供数据和更清晰的解释。有几种方法可以完成此操作。这是其中之一。

select *
from FormFields
where FormId
not in
(
    select FormId
    from FormFields
    where Label in ('First Name', 'Last Name')
)

答案 1 :(得分:1)

您尝试的内容非常接近您的解决方案。尝试如下更改您尝试过的内容。

SELECT DISTINCT Label, FormId 
FROM FormFields
WHERE FormId NOT IN
(
    SELECT DISTINCT FormId
    FROM FormFields
    WHERE Label= 'First Name' OR Label= 'Last Name'
)
ORDER By FormId 

或其他解决方案:

SELECT * FROM FormFields 
WHERE FormId NOT IN 
(
    SELECT DISTINCT FormId 
    FROM FormFields 
    WHERE Label IN ('First Name' , 'Last Name')
)