甲骨文:获得除一个以外的所有行

时间:2015-08-03 10:11:24

标签: sql oracle oracle11g

我遇到了一个简单的查询。我想要的是获得除一个以外的所有行。请查看以下数据。

COL_A   COL_B
B       D
B       (null)
B       C
G       D
G       (null)
G       C

除了 B C 之外,我想获取所有行。请看sqlfiddle

我试图通过和col_A <> 'B' and col_B <> 'C'来获取行,但它并未执行操作。非常感谢您的帮助。

由于

6 个答案:

答案 0 :(得分:2)

一种可能的解决方案。也许不是最优雅的:

select req_for col_A, doc_typ col_B 
from a
where (req_for IS NULL OR doc_typ IS NULL) 
OR (req_for,doc_typ) 
NOT IN (select 'B','C' from dual);

答案 1 :(得分:1)

尝试

entities.stream().collect(...)

where not(col_A = 'B' and col_B = 'C')

答案 2 :(得分:1)

您的问题是NULL值。以下是在Oracle中表达这一点的简明方法:

where (col_A || col_B) <>  'BC'

Oracle将NULL值视为字符串连接中的空字符串。

答案 3 :(得分:0)

啊,否定。总是造成麻烦。使用这样的SQL查询,您必须考虑要包含的内容,而不是您想要排除的内容。

如果执行where nvl(doc_typ,'NA') <> 'C' and nvl(req_for, 'NA') <> 'B';,则不包括doc_type为C的任何行,并且不包含req_for为B的任何行。

你想做where nvl(doc_typ,'NA') <> 'C' or nvl(req_for, 'NA') <> 'B';。这样,只要其req_for也不是B,仍将包含C的doc_type。

答案 4 :(得分:0)

你能不能只删除不需要的行:

select req_for col_A, doc_typ col_B from a
where NOT (NVL(doc_typ,'NA') = 'C' AND nvl(req_for,'NA') = 'B');

答案 5 :(得分:0)

getResources().getStringArray(R.array.main_drawer_entries);