SQL选择仅包含X的位置

时间:2015-11-05 00:16:43

标签: sql tsql

对不起小便糟糕的头衔。

我用sqlfiddle创建了一个示例数据库,但是我很遗憾,我甚至无法从查询开始。 http://sqlfiddle.com/#!3/940b7d

在示例数据库中,我需要所有拥有设备并且可以拥有设备的帐号和#34; CRAPY"但只有它有任何其他类型的设备。 因此,在下面的示例中,我将返回值12345,因为该帐户确实有设备,即使它也有" CRAPY" 它还将返回44444和66666,因为它有设备。 它不会返回67891,因为即使它有设备它只有" CRAPY"设备。

上帝我真的希望这很清楚,

create table testdb
(
   Account varchar(5),
   Equipment varchar(5)

)
insert into testdb (Account,Equipment) values ('12345','CDG12')
insert into testdb (Account,Equipment) values ('12345','CRAPY')
insert into testdb (Account,Equipment) values ('12345','CDG12')
insert into testdb (Account,Equipment) values ('12345','CDG12')
insert into testdb (Account,Equipment) values ('12345','CDG12')
insert into testdb (Account,Equipment) values ('67891','CRAPY')
insert into testdb (Account,Equipment) values ('67891','CRAPY')
insert into testdb (Account,Equipment) values ('67891','CRAPY')
insert into testdb (Account,Equipment) values ('67891','CRAPY')
insert into testdb (Account,Equipment) values ('67891','CRAPY')
insert into testdb (Account,Equipment) values ('44444','YYYYY')
insert into testdb (Account,Equipment) values ('66666','PPPPP')

4 个答案:

答案 0 :(得分:2)

我认为你的问题陈述很糟糕。更明确的声明是返回任何非 - " CRAPY"设备。 " CRAPY"的存在设备在很大程度上是无关紧要的。

你可以这样做:

SELECT DISTINCT Account FROM testdb WHERE Equipment <> 'CRAPY'

将忽略&#34; CRAPY&#34;记录并仅返回非&#34; CRAPY&#34;设备(无论该帐户是否拥有&#34; CRAPY&#34;设备 - 我们都不关心它。)

答案 1 :(得分:1)

这应该可以解决问题。

SELECT Account
FROM testdb
WHERE Equipment != 'CRAPY'
GROUP BY Account

您可以替换“&lt;&gt;”如果你喜欢这种语法我在哪里“!=”。

编辑:这里的很多其他答案都使用DISTINCT。作为DBA,使用DISTINCT的任何查询都不会通过我的代码审核。这是懒惰的编程,即使它在逻辑上等同于使用GROUP BY。请避免使用懒惰的DISTINCT查询。

答案 2 :(得分:0)

对Equipment&lt;&gt;使用DISTINCT查询'CRAPY':

SELECT DISTINCT Account FROM testdb
WHERE Equipment <> 'CRAPY'

或者如果您想要所有其他字段用于此类帐户的所有记录,请使用EXISTS:

SELECT * FROM testdb
WHERE EXISTS(
    SELECT * FROM testdb AS t1
    WHERE testdb.Account = t1.Account
      AND t1.Account <> 'CRAPY'
)

答案 3 :(得分:0)

如果我们删除'CRAPY'记录,剩下的任何帐户都是您需要报告的帐户(除了'CRAPY'以外的设备)

select distinct account from testdb where Equipment not like  'CRAPY'

如果您需要查看他们拥有的设备,或需要快速进行健全检查:

select account, Equipment
from testdb 
where account in 
   (
    select distinct account from testdb where Equipment not like  'CRAPY'
    )