左连接失败,标识无效

时间:2014-12-08 21:32:11

标签: sql oracle join

我正在进行全外连接,但"ORA-00904: "TABLE2"."PID": invalid identifier"

失败了

不确定我在这里做错了什么。

见Sqlfiddle: http://sqlfiddle.com/#!4/b6883/12

2 个答案:

答案 0 :(得分:1)

由于您在创建表时使用了带引号的标识符,因此所有列都是以小写形式创建的

CREATE TABLE Table1 ("pid" int, "seqno" int, "thing1" int)

因此您还需要在select语句中使用带引号的标识符

SELECT COALESCE(Table1."pid",Table2."pid") as pid, COALESCE(Table1."seqno", Table2."seqno") as seqno, Table1."thing1", Table2."thing2" FROM Table1 FULL OUTER JOIN Table2 ON Table1."pid" = Table2."pid";

请参阅小提琴:http://sqlfiddle.com/#!4/b6883/24

答案 1 :(得分:1)

不要将列名括在引号中。如果您使用双引号,则告诉Oracle在查询中使用确切的大小写。如果您在查询中不使用相同的案例,则会失败。

见这里:http://sqlfiddle.com/#!4/0af94/1/2

你DML应该是:

CREATE TABLE Table1(pid int, seqno int, thing1 int);

INSERT ALL 
    INTO Table1 (pid, seqno, thing1)
         VALUES (1, 1, 300) 
    INTO Table1 (pid, seqno, thing1)
         VALUES (2, 1, 400)
SELECT * FROM dual;

CREATE TABLE Table2 (pid int, seqno int, thing2 varchar2(1));

INSERT ALL 
    INTO Table2 (pid, seqno, thing2)
         VALUES (1, 1, 'a')
    INTO Table2 (pid, seqno, thing2)
         VALUES (1, 2, 'b')
    INTO Table2 (pid, seqno, thing2)
         VALUES (3, 2, 'z')
SELECT * FROM dual;

http://sqlfiddle.com/#!4/0af94/1/2