SELECT * FROM foobar
WHERE userid != '100' AND col1 REGEXP '[[:<:]]test[[:>:]]'
OR userid != '100' AND col2 REGEXP '[[:<:]]test[[:>:]]'
OR userid != '100' AND col3 REGEXP '[[:<:]]test[[:>:]]'
这个查询对我来说很好。它将基本上按两个标准过滤
除了col4
之外,我还有其他above two condition
,我必须过滤掉那些col4 = 'y'
我应该如何修改上述查询?
答案 0 :(得分:2)
您的查询中有错误,您需要将第二个col2
更改为col3
。如果重新格式化代码,则更容易看到错误:
SELECT * FROM foobar
WHERE (userid != '100' AND col1 REGEXP '[[:<:]]test[[:>:]]') OR
(userid != '100' AND col2 REGEXP '[[:<:]]test[[:>:]]') OR
(userid != '100' AND col2 REGEXP '[[:<:]]test[[:>:]]')
我还添加了括号以使评估顺序清晰。您可以重写查询以避免重复表达式userid != '100'
。然后只需添加您缺少的条款:
SELECT * FROM foobar
WHERE userid != '100'
AND col4 <> 'y'
AND (
col1 REGEXP '[[:<:]]test[[:>:]]' OR
col2 REGEXP '[[:<:]]test[[:>:]]' OR
col3 REGEXP '[[:<:]]test[[:>:]]'
)
答案 1 :(得分:1)
这样的东西?您也可以将userid != '100'
分开,因为这是三项检查的共同点。
SELECT *
FROM foobar
WHERE userid != '100'
AND (col1 REGEXP '[[:<:]]test[[:>:]]'
OR col2 REGEXP '[[:<:]]test[[:>:]]'
OR col3 REGEXP '[[:<:]]test[[:>:]]' )
AND col4 != 'y'
答案 2 :(得分:0)
SELECT *
FROM foobar
WHERE userid != '100'
AND (col1 REGEXP '[[:<:]]test[[:>:]]'
OR col2 REGEXP '[[:<:]]test[[:>:]]'
OR col3 REGEXP '[[:<:]]test[[:>:]]')
AND col4 <> 'y'
答案 3 :(得分:0)
试试这个:
SELECT *
FROM foobar
WHERE col4 = 'y'
OR (
userid != '100'
AND (
col1 REGEXP '[[:<:]]test[[:>:]]'
OR
col2 REGEXP '[[:<:]]test[[:>:]]'
OR
col2 REGEXP '[[:<:]]test[[:>:]]'
)
)
答案 4 :(得分:0)
SELECT * FROM foobar WHERE
(userid != '100') AND
(col1 REGEXP '[[:<:]]test[[:>:]]' OR userid != '100' OR col2 REGEXP '[[:<:]]test[[:>:]]' OR col2 REGEXP '[[:<:]]test[[:>:]]')
AND col4 <> 'y'