Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
默认情况下,SQL选择非空值_Sql_Oracle - Fatal编程技术网

默认情况下,SQL选择非空值

默认情况下,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 |

我需要一个sql语句,可以在字段不为null时选择行,但如果每个字段都为null,则显示它们

比如:

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如果其中一个答案是正确的,你可以接受它,这样问题就结束了(如果合适的话,请向上投票)。