多表达式不喜欢sql
基本上我有一张这样的桌子多表达式不喜欢sql,sql,sql-server,tsql,Sql,Sql Server,Tsql,基本上我有一张这样的桌子 +--------+----------+ | name | Group | +--------+----------+ | xxxx | 1 | | yyyy | 1 | | xxxx | 2 | | yyyy | 3 | | xxxx | 4 | +--------+----------+ 我不想显示组中名称为xxxx的任何记录。
+--------+----------+
| name | Group |
+--------+----------+
| xxxx | 1 |
| yyyy | 1 |
| xxxx | 2 |
| yyyy | 3 |
| xxxx | 4 |
+--------+----------+
我不想显示组中名称为xxxx的任何记录。您似乎想要:
select t.*
from table t
where not exists (select 1 from table t1 where t1.group = t.group and t1.name = 'xxxx')
首先需要一个子查询来标识不需要的组。然后您需要从主查询中筛选它
SELECT * FROM Table1
Where group not in ( select group from Table1 where name != 'xxxx')
到现在为止你都试了些什么?试试这个。从名称“xxxx”的位置选择*编辑问题并添加您想要的结果。所以您只想在组3中显示行?因为GRP 1、2和4都包含以xxxx作为名称的内容?这是一个原始示例。我会避免在()中使用
IN
,而我可以使用EXISTS()
为什么?它们都有使用区域。我认为这是一个非常广泛的话题,在这里讨论为什么?好的。@Sami“这以前是真的,但在当前版本(至少2008年)中,优化器要聪明得多……它实际上把in()当作EXISTS()”。@NickA,OP尚未指定版本:)您的AWS似乎是正确的,但我遇到了一些问题,因为我使用CTE,我在CTE实现后的查询看起来像这样:选择不同的c.TWG_Kod作为名称,g1.TWG_Kod作为组,k.twr_nazwa,m.MAG_nazwa,来自CTE c的m.MAG_Kod将cdn.TwrGrupy g1与c.TwG_GIDNumer=g1.TwG_GrONumer上的(nolock)连接起来。由于列名重复,我不知道如何在查询中使用它