加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle SQL中USING和ON的区别

发布时间:2021-01-26 01:36:53 所属栏目:站长百科 来源:网络整理
导读:看起来好像没有区别: SELECT a.col1,b.col2 FROM table a JOIN table2 b USING (col3) 和 SELECT a.col1,b.col2 FROM table a JOIN table2 b ON (a.col3 = b.col3) 照旧有吗? (虽然除了ON我可以行使差异的列名) 办理要领 我的差异之处在于你可以行使USING

看起来好像没有区别:

SELECT a.col1,b.col2
  FROM table a JOIN table2 b
 USING (col3)

SELECT a.col1,b.col2
  FROM table a JOIN table2 b
    ON (a.col3 = b.col3)

照旧有吗? (虽然除了ON我可以行使差异的列名)

办理要领

我的差异之处在于你可以行使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;

在上面的select中,你获得一个ora-25154,“USING子句的列部门不能有限制符”.

假如删除e1.empid限制符,如下所示:

SELECT r.mgrid,empid,e1.name
  FROM roster r JOIN emp e1 USING(empid)
                JOIN emp e2 ON r.mgrid = e2.empid;

您收到ORA-00918错误,“列恍惚界说”.

你必需行使:

SELECT r.mgrid,e1.name
  FROM roster r JOIN emp e1 ON r.empid = e1.empid
                JOIN emp e2 ON r.mgrid = e2.empid;

这个例子是计划的,可是当我第一次试探毗连语法时,我碰着了真实环境下的这个题目.从当时起我就避开了USING条款.除了屡次击键之外,USING子句没有任何上风.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读