Oracle 神谕如何使用IN运算符和外部联接处理外部字段

Oracle 神谕如何使用IN运算符和外部联接处理外部字段,oracle,join,outer-join,Oracle,Join,Outer Join,我是这样写的 SELECT * FROM (SELECT TABLE2.VAL AS VAL1, TABLE2.VAL AS VAL2, TABLE2.VAL AS VAL3, TABLE2.VAL AS VAL4, TABLE2.VAL AS VAL5, TABLE2.VAL AS VAL6, CASE WHEN VAL1

我是这样写的

SELECT * 
FROM (SELECT 
          TABLE2.VAL AS VAL1,
          TABLE2.VAL AS VAL2,
          TABLE2.VAL AS VAL3,
          TABLE2.VAL AS VAL4,
          TABLE2.VAL AS VAL5,
          TABLE2.VAL AS VAL6,
          CASE 
             WHEN VAL1 IS NULL THEN '10'
             WHEN VAL3 IS NULL THEN '20'
             WHEN VAL5 IS NULL THEN '30'
             ELSE '40' 
          END PROGRESS
      FROM 
          TABLE1, TABLE2
      WHERE 
          TABLE1.KEY = TABLE2.KEY(+)
          TABLE2.COND IN ('1','2','3','4','5','6')
) 
WHERE 
    PROGRESS > '20'
FROM TABLE2 TB2_1, TABLE2 TB2_2, TABLE3 TB2_3
WHERE TB2_1.KEY(+) = TABLE1.KEY AND TB2_2.KEY(+) = TABLE1.KEY 
此查询不起作用。这是一个错误

,CASE WHEN VAL1 IS NULL THEN '10'
      WHEN VAL3 IS NULL THEN '20'
      WHEN VAL5 IS NULL THEN '30'
      ELSE '40' END PROGRESS
这部分。错误说VAL1是不一致的

如果我这样使用,我可以解决这个问题

SELECT * 
FROM (SELECT 
          TABLE2.VAL AS VAL1,
          TABLE2.VAL AS VAL2,
          TABLE2.VAL AS VAL3,
          TABLE2.VAL AS VAL4,
          TABLE2.VAL AS VAL5,
          TABLE2.VAL AS VAL6,
          CASE 
             WHEN VAL1 IS NULL THEN '10'
             WHEN VAL3 IS NULL THEN '20'
             WHEN VAL5 IS NULL THEN '30'
             ELSE '40' 
          END PROGRESS
      FROM 
          TABLE1, TABLE2
      WHERE 
          TABLE1.KEY = TABLE2.KEY(+)
          TABLE2.COND IN ('1','2','3','4','5','6')
) 
WHERE 
    PROGRESS > '20'
FROM TABLE2 TB2_1, TABLE2 TB2_2, TABLE3 TB2_3
WHERE TB2_1.KEY(+) = TABLE1.KEY AND TB2_2.KEY(+) = TABLE1.KEY 
多次声明相同的表,但是

我不想这样做,因为真正的查询要比这个复杂得多

有没有什么办法可以让我区分像这样的外部表格

,CASE WHEN TABLE2[1].VAL IS NULL THEN '10'
      WHEN TABLE2[2].VAL IS NULL THEN '20'
      WHEN TABLE2[3].VAL IS NULL THEN '30'
      ELSE '40' END PROGRESS

或者其他任何方式。请帮助:)

使用正确的显式
JOIN
语法:

SELECT . . .
FROM TABLE1 LEFT JOIN
     TABLE2
     ON TABLE1.KEY = TABLE2.KEY AND
        TABLE2.COND IN ('1','2','3','4','5','6')

简单规则:切勿在
FROM
子句中使用逗号。始终使用显式的
JOIN
语法。

不要在
案例中使用别名
语句:

CASE WHEN TABLE2.VAL IS NULL THEN '10'
     WHEN TABLE2.VAL IS NULL THEN '20'
     WHEN TABLE2.VAL IS NULL THEN '30'
    ELSE '40'
END PROGRESS
我不知道您的
SELECT
语句的含义是什么,因为它有6次相同的列别名,但希望这个答案至少能消除您当前的错误


您还应该接受@Gordon的建议,使用显式的左(外)连接。您使用的语法很难理解。

您的
SELECT
语句的含义/意图是什么?您对同一列使用了6次别名。