对我来说不同的是,你可以用 USING 子句把自己画到一个角落里:
CREATE TABLE roster (mgrid INTEGER, empid INTEGER);
CREATE TABLE emp (empid INTEGER, NAME VARCHAR2(20));
INSERT INTO roster VALUES (1,10);
INSERT INTO roster VALUES (1,11);
INSERT INTO roster VALUES (1,12);
INSERT INTO roster VALUES (2,20);
INSERT INTO roster VALUES (2,21);
INSERT INTO emp VALUES (10, 'John');
INSERT INTO emp VALUES (11, 'Steve');
INSERT INTO emp VALUES (12, 'Mary');
INSERT INTO emp VALUES (20, 'Ann');
INSERT INTO emp VALUES (21, 'George');
INSERT INTO emp VALUES (1, 'Pete');
INSERT INTO emp VALUES (2, 'Sally');
SELECT r.mgrid, e2.name, e1.empid, e1.name
FROM roster r JOIN emp e1 USING(empid)
JOIN emp e2 ON r.mgrid = e2.empid;
在上面的选择中,你得到一个 ora-25154,“USING 子句的列部分不能有限定符”。
如果您删除 e1.empid 限定符,如:
SELECT r.mgrid, e2.name, empid, e1.name
FROM roster r JOIN emp e1 USING(empid)
JOIN emp e2 ON r.mgrid = e2.empid;
您收到 ORA-00918 错误,“列定义不明确”。
你必须使用:
SELECT r.mgrid, e2.name, e1.empid, e1.name
FROM roster r JOIN emp e1 ON r.empid = e1.empid
JOIN emp e2 ON r.mgrid = e2.empid;
这个例子是人为设计的,但是当我第一次探索连接语法时,我在实际情况中遇到了这个确切的问题。从那以后,我一直避免使用 USING 子句。 USING 子句除了敲几下键外没有其他优势。