2012-07-26 84 views
1

我有一张表(记录),如下所示。省略SQL中的某些记录

ID   Status 
AA124   Pass 
AA125   Pass 
Z_AA134  Fail 
Z_AA135  Pass 
P4235   Fail 

我想隐藏所有以Z_开始记录,但不能掩盖与Z_开始记录,并具有为失败,并显示其他状态。

所以我想从上表中选择

ID   Status 
AA124   Pass 
AA125   Pass 
Z_AA134  Fail 
P4235   Fail 

我选择查询只生产Z_而不是其他人(显然)

Select * from table where ID like 'Z_%' and status = 'Fail' 
+0

显示您必须以 – 2012-07-26 18:47:24

回答

5
select * 
from YourTable 
where ID not like 'Z|_%' escape '|' or Status = 'Fail' 

Working example at SQL Fiddle.

+0

开头的查询您能解释什么是'Z | _%'escape'|' – Ank 2012-07-26 18:50:20

+0

'_'是类似表达式中的通配符,表示任何一个字符。所以'Z_%'匹配'Z_1'和'Z11'。你可以使用[转义字符](http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like)来使'_'的意思是'_',而不是任何字符。 – Andomar 2012-07-26 18:52:38

+1

'%'表示LIKE后面的字符串中的任意数量的字符。 '_'通常代表一个字符,所以如果你想要一个文字下划线,它必须被转义。 '\'是通常的转义字符,但他将其更改为'|' – yitwail 2012-07-26 19:03:13

2

你并不总是需要使用像,所以我想提供:

select * 
from t 
where status = 'Fail' or left(id, 2) <> 'Z_'