如何修改此特定查询?

时间:2011-01-19 20:36:20

标签: sql mysql database

SELECT * FROM foobar
  WHERE userid != '100' AND col1 REGEXP '[[:<:]]test[[:>:]]'
     OR userid != '100' AND col2 REGEXP '[[:<:]]test[[:>:]]'
     OR userid != '100' AND col3 REGEXP '[[:<:]]test[[:>:]]' 

这个查询对我来说很好。它将基本上按两个标准过滤

  1. 其中col1或col2或col3具有“test”和
  2. userid不是100.
  3. 除了col4之外,我还有其他above two condition,我必须过滤掉那些col4 = 'y'

    的结果

    我应该如何修改上述查询?

5 个答案:

答案 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'