默认情况下,SQL选择非空值
我需要一个sql语句,可以在字段不为null时选择行,但如果每个字段都为null,则显示它们 比如:默认情况下,SQL选择非空值,sql,oracle,Sql,Oracle,我需要一个sql语句,可以在字段不为null时选择行,但如果每个字段都为null,则显示它们 比如: SELECT field1, field2, field3 FROM tableName WHERE field1 = CASE WHEN field1 IS NOT NULL THEN field1 ELSE null END; 示例: 有一张像这样的桌子: ______________________________________ | field1 |
SELECT
field1, field2, field3
FROM
tableName
WHERE field1 =
CASE WHEN field1 IS NOT NULL THEN
field1
ELSE
null
END;
示例:
有一张像这样的桌子:
______________________________________
| field1 | field2 | field3 |
--------------------------------------
| null | TestData | 123 |
| 23 | TestData | 123 |
| null | TestData | 123 |
--------------------------------------
结果将是:
______________________________________
| field1 | field2 | field3 |
--------------------------------------
| 23 | TestData | 123 |
--------------------------------------
但如果每个字段1都为空,则数据为:
______________________________________
| field1 | field2 | field3 |
--------------------------------------
| null | TestData | 123 |
| null | TestData | 123 |
| null | TestData | 123 |
--------------------------------------
它应该显示每一行请尝试以下操作:
SELECT
field1, field2, field3
FROM
tableName
WHERE (field1 is not null) or
(field1 is null and field2 is null and field3 is null)
带有数字: Oracle 11g R2架构设置:
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT CAST( null AS NUMBER(4) ), 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 123 |
| (null) | TestData | 123 |
| (null) | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 125 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 124
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 124
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 124 |
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 125
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 125
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 125 |
查询1:
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT CAST( null AS NUMBER(4) ), 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 123 |
| (null) | TestData | 123 |
| (null) | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 125 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 124
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 124
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 124 |
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 125
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 125
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 125 |
:
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT CAST( null AS NUMBER(4) ), 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 123 |
| (null) | TestData | 123 |
| (null) | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 125 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 124
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 124
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 124 |
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 125
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 125
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 125 |
仅包含空值:
Oracle 11g R2架构设置:
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT CAST( null AS NUMBER(4) ), 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 123 |
| (null) | TestData | 123 |
| (null) | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 125 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 124
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 124
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 124 |
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 125
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 125
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 125 |
查询2:
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT CAST( null AS NUMBER(4) ), 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 123 |
| (null) | TestData | 123 |
| (null) | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 125 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 124
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 124
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 124 |
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 125
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 125
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 125 |
:
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT CAST( null AS NUMBER(4) ), 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 123 |
| (null) | TestData | 123 |
| (null) | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 125 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 124
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 124
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 124 |
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 125
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 125
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 125 |
------编辑-----
Oracle 11g R2架构设置:
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT CAST( null AS NUMBER(4) ), 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 123 |
| (null) | TestData | 123 |
| (null) | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 125 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 124
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 124
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 124 |
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 125
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 125
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 125 |
查询1:
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT CAST( null AS NUMBER(4) ), 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 123 |
| (null) | TestData | 123 |
| (null) | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 125 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 124
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 124
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 124 |
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 125
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 125
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 125 |
:
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT CAST( null AS NUMBER(4) ), 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 123 |
| (null) | TestData | 123 |
| (null) | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 125 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 124
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 124
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 124 |
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 125
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 125
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 125 |
查询2:
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT CAST( null AS NUMBER(4) ), 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 123 |
| (null) | TestData | 123 |
| (null) | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 125 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 124
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 124
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 124 |
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 125
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 125
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 125 |
:
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT CAST( null AS NUMBER(4) ), 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT null, 'TestData', 123 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL )
OR field1 IS NOT NULL
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 123 |
| (null) | TestData | 123 |
| (null) | TestData | 123 |
CREATE TABLE test ( field1, field2, field3 ) AS
SELECT null, 'TestData', 123 FROM DUAL
UNION ALL SELECT 23, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 124 FROM DUAL
UNION ALL SELECT null, 'TestData', 125 FROM DUAL;
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 124
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 124
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| 23 | TestData | 124 |
SELECT field1,
field2,
field3
FROM test
WHERE (
NOT EXISTS ( SELECT 1
FROM test
WHERE field1 IS NOT NULL
AND field2 = 'TestData'
AND field3 = 125
)
OR field1 IS NOT NULL
)
AND field2 = 'TestData'
AND field3 = 125
| FIELD1 | FIELD2 | FIELD3 |
|--------|----------|--------|
| (null) | TestData | 125 |
请使用示例数据和所需结果编辑您的问题。不清楚,请尝试解释更多您想要实现的目标。看起来您想要
COALESCE()
,但我不确定我是否了解您的确切规格。。。你能编辑这个问题并提供一个例子吗?这个方法很好,但不能解决我的问题。请看这个例子:当field3=124时,它工作,但如果是125,它就不工作!你让我开心。多谢各位much@JonathanCobo如果其中一个答案是正确的,你可以接受它,这样问题就结束了(如果合适的话,请向上投票)。