Sql 在这张桌子上,我怎么才能只给那些喝过咖啡或啤酒但从未喝过奶昔或水的人回敬呢?
然后我只想见艾丽卡和大卫(因为他们只喝咖啡和/或啤酒),而不想见安德烈斯,因为他喝奶昔;而不是泰勒,因为他既有奶昔又有水。你可以使用Sql 在这张桌子上,我怎么才能只给那些喝过咖啡或啤酒但从未喝过奶昔或水的人回敬呢?,sql,conditional-statements,teradata,Sql,Conditional Statements,Teradata,然后我只想见艾丽卡和大卫(因为他们只喝咖啡和/或啤酒),而不想见安德烈斯,因为他喝奶昔;而不是泰勒,因为他既有奶昔又有水。你可以使用EXISTS和not EXISTS的组合: Column A | Column B (Beverage) Andres Coffee Erica Coffee David Beer Tyler Beer Tyler Beer Andres Shake Erica Coffee Erica
EXISTS
和not EXISTS
的组合:
Column A | Column B (Beverage)
Andres Coffee
Erica Coffee
David Beer
Tyler Beer
Tyler Beer
Andres Shake
Erica Coffee
Erica Coffee
David Beer
David Coffee
Tyler Water
Tyler Shake
您可以组合使用
存在
和不存在
:
Column A | Column B (Beverage)
Andres Coffee
Erica Coffee
David Beer
Tyler Beer
Tyler Beer
Andres Shake
Erica Coffee
Erica Coffee
David Beer
David Coffee
Tyler Water
Tyler Shake
您可以使用“不存在”排除和“不同”显示唯一列A
SELECT *
FROM YourTable AS T
WHERE EXISTS(SELECT 1 FROM YourTable
WHERE ColumnA = T.ColumnA
AND ColumnB IN ('Coffee','Beer'))
AND NOT EXISTS(SELECT 1 FROM YourTable
WHERE ColumnA = T.ColumnA
AND ColumnB IN ('Shake','Water'))
您可以使用“不存在”排除和“不同”显示唯一列A
SELECT *
FROM YourTable AS T
WHERE EXISTS(SELECT 1 FROM YourTable
WHERE ColumnA = T.ColumnA
AND ColumnB IN ('Coffee','Beer'))
AND NOT EXISTS(SELECT 1 FROM YourTable
WHERE ColumnA = T.ColumnA
AND ColumnB IN ('Shake','Water'))
简单分组方式。不需要相关子查询(存在/不存在) 简单分组方式。
不需要相关子查询(存在/不存在)
你需要[摇一摇水]或[摇一摇水]-你的主题与你的问题不匹配。你需要[摇一摇水]或[摇一摇水]-你的主题与你的问题不匹配。
select columnA from t where columnB in ('Coffee','Beer')
minus
select columnA from t where columnB in ('Shake')
minus
select columnA from t where columnB in ('Shake','Water')
having count(distinct columnB)=2
;