Oracle:需要帮助匹配多个条件,但需要将其视为一个

时间:2014-07-09 21:05:06

标签: mysql sql database oracle sequel

我首先查看mysql数据库中的记录,然后使用排除列表生成oracle查询。我不想匹配oracle数据库中的一行,如果它的value2,3和4在where子句中组合了相同的一组()。我不能让这个工作,我不知道为什么。任何人都可以提供一些见解吗?

这是我当前的oracle查询:

SELECT
    value1,
    value2,
    value3,
    value4
FROM
    table
WHERE
    AND value4 > 1
    AND (value2 != '102632151' AND value3 != '1111' AND value4 != '2')
    AND (value2 != '102632353' AND value3 != '1111' AND value4 != '3')
    AND (value2 != '102633090' AND value3 != '1111' AND value4 != '8')
ORDER BY
    value1 ASC

所以我想说我的数据库中有五行:

value1      value2          value3          value4
__________________________________________________
1           102632151       1111            2
2           102632200       1111            2
3           102632353       1111            3
4           102633000       1111            2
5           102633090       1111            8

我的目的是返回以下行:

value1      value2          value3          value4
-------------------------------------------------------
2           102632200       1111            2
4           102633000       1111            2

但是,如果我的数据库中的5行看起来像这样:

value1      value2          value3          value4
-------------------------------------------------------
1           102632151       2222 <-----     2
2           102632200       1111            2
3           102632353       1111            3
4           102633000       1111            2
5           102633090       1111            9 <-----

查询应该返回:

value1      value2          value3          value4
-------------------------------------------------------
1           102632151       2222            2
2           102632200       1111            2
4           102633000       1111            2
5           102633090       1111            9

1 个答案:

答案 0 :(得分:0)

我认为您希望where子句为:

WHERE value4 > 1 AND
      NOT (value2 = '102632151' AND value3 = '1111' AND value4 = '2') AND
      NOT (value2 = '102632353' AND value3 = '1111' AND value4 = '3') AND
      NOT (value2 = '102633090' AND value3 = '1111' AND value4 = '8')

我认为and not最容易捕捉到你想要的逻辑。

编辑:

您也可以将其命名为:

WHERE value4 > 0 AND
      (value2 <> '102632151' OR value3 <> '1111' OR value4 <> '2') AND
      (value2 <> '102632353' OR value3 <> '1111' OR value4 <> '3') AND
      (value2 <> '102633090' OR value3 <> '1111' OR value4 <> '8')