我首先查看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
答案 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')