当值存在于多行时查询唯一值
Querying for Unique Values When The Value Exists on Multiple Rows
感谢阅读!
我想找到任何值(“名称”),但如果它与“”存在于同一行,我不想要该值输入 " 等于 "Z".
例如,在下面的 table 中,我想要所有 Sam 和 Joe 记录,但我不想要任何 Bob 记录,因为 Bob 所在的行之一包含一个“Z” “类型”字段中的值。如果任何 Bob 有一个“Z”,我想要“Bobs”none
Name
Type
Bob
A
Bob
B
Bob
Z
Sam
A
Joe
A
Joe
B
Joe
C
你现在可能已经猜到我的问题了。如果我尝试 select 基于包含“Z”的“Type”字段 NOT 的记录,那么我仍然会返回包含“A”和“B”的两个“Bob”行。
如果任何 bob 行包含“Z”,我不希望 任何 “Bob”行到 return。请参阅下面的预期结果:
Name
Sam
Joe
有谁知道如何在 SQL select 语句中实现这一点?
非常感谢,
洛根
您可以按 name
对查询进行分组,并有一个 having
条件来计算值为“Z”的 type
s:
SELECT name
FROM mytable
GROUP BY name
HAVING COUNT(CASE name WHEN 'Z' THEN 1 END) = 0
SELECT t.name
FROM MyTable t
WHERE
NOT EXISTS (
SELECT 1
FROM MyTable
WHERE
name = t.name
AND type = 'Z'
)
感谢阅读!
我想找到任何值(“名称”),但如果它与“”存在于同一行,我不想要该值输入 " 等于 "Z".
例如,在下面的 table 中,我想要所有 Sam 和 Joe 记录,但我不想要任何 Bob 记录,因为 Bob 所在的行之一包含一个“Z” “类型”字段中的值。如果任何 Bob 有一个“Z”,我想要“Bobs”none
Name | Type |
---|---|
Bob | A |
Bob | B |
Bob | Z |
Sam | A |
Joe | A |
Joe | B |
Joe | C |
你现在可能已经猜到我的问题了。如果我尝试 select 基于包含“Z”的“Type”字段 NOT 的记录,那么我仍然会返回包含“A”和“B”的两个“Bob”行。
如果任何 bob 行包含“Z”,我不希望 任何 “Bob”行到 return。请参阅下面的预期结果:
Name |
---|
Sam |
Joe |
有谁知道如何在 SQL select 语句中实现这一点?
非常感谢,
洛根
您可以按 name
对查询进行分组,并有一个 having
条件来计算值为“Z”的 type
s:
SELECT name
FROM mytable
GROUP BY name
HAVING COUNT(CASE name WHEN 'Z' THEN 1 END) = 0
SELECT t.name
FROM MyTable t
WHERE
NOT EXISTS (
SELECT 1
FROM MyTable
WHERE
name = t.name
AND type = 'Z'
)