【问题标题】:Multi not like expression sql多不喜欢表达式sql
【发布时间】:2018-12-04 09:51:22
【问题描述】:

所以基本上我有一张这样的桌子。

+--------+----------+   
|   name |  Group   |  
+--------+----------+   
|   xxxx |   1      |  
|   yyyy |   1      |  
|   xxxx |   2      |  
|   yyyy |   3      |  
|   xxxx |   4      |  
+--------+----------+

我不想在他们的组中显示任何名称为 xxxx 的记录。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 试试这个。 select * from where name 'xxxx'
  • 编辑问题并添加您想要的结果。
  • 所以您只想显示第 3 组中的行?因为 grps 1,2 和 4 都包含以 xxxx 作为名称的东西?
  • 这是原始示例。

标签: sql sql-server tsql


【解决方案1】:

你似乎想要:

select t.*
from table t
where not exists (select 1 from table t1 where t1.group = t.group and t1.name = 'xxxx')

【讨论】:

  • 您的 awswer 似乎是正确的,但我遇到了一些问题,因为我使用 CTE 并且我在 CTE 实施后的查询看起来像这样 SELECT DISTINCT c.TWG_Kod as NAME,g1.TwG_Kod as GROUP,k。 twr_nazwa, m.MAG_Nazwa, m.MAG_Kod FROM CTE c 在 c.TwG_GIDNumer = g1.TwG_GrONumer 上加入 cdn.TwrGrupy g1 和 (nolock)。而且我不知道如何在列名重复的查询原因中使用它
【解决方案2】:

您首先需要一个子查询来识别您不需要的组。那么你需要从主查询中过滤它

SELECT * FROM Table1 
Where group not in ( select group from Table1 where name != 'xxxx')

【讨论】:

  • 我会避免使用IN(),而我可以使用EXISTS()
  • 为什么?他们都有使用区域。我认为这是一个非常广泛的话题,可以在这里讨论
  • 为什么?好的see why here.
  • @Sami "这曾经是正确的,但在当前版本(至少 2008 年)中,优化器要聪明得多......它实际上将 IN () 视为 EXISTS ()"...
  • @NickA 好吧,OP 还没有指定版本:)
猜你喜欢
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多