SQL:使用 vs on

标签 sql database oracle

问题

让我给你查询中使用的表的描述

desc takes;
Name      Null     Type        
--------- -------- ----------- 
ID        NOT NULL VARCHAR2(5) 
COURSE_ID NOT NULL VARCHAR2(8) 
SEC_ID    NOT NULL VARCHAR2(8) 
SEMESTER  NOT NULL VARCHAR2(6) 
YEAR      NOT NULL NUMBER(4)   
GRADE              VARCHAR2(2) 
------------------------------------
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
desc course;
Name      Null     Type         
--------- -------- ----------------- 
COURSE_ID NOT NULL VARCHAR2(8)  
TITLE              VARCHAR2(50) 
DEPT_NAME          VARCHAR2(20) 
CREDITS            NUMBER(2)    
-------------------------------------

查询 1:

select course.COURSE_ID from course join takes on course.COURSE_ID=takes.COURSE_ID;

它工作正常。

但我对其他以某种方式相关的查询有疑问。

查询 2:

select course.COURSE_ID from course join takes using(COURSE_ID);

我得到的错误是

Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-25154: column part of USING clause cannot have qualifier 25154. 00000 - "column part of USING clause cannot have qualifier" *Cause: Columns that are used for a named-join (either a NATURAL join or a join with a USING clause) cannot have an explicit qualifier. *Action: Remove the qualifier.

虽然如果我在选择后更改 course.course_ID 以外的属性,例如 course.title 为:

select course.title from course join takes using(COURSE_ID);

我得到了预期的输出,有什么错误吗?

最佳答案

错误消息说明了一切:使用 USING (COURSE_ID) 时,您的行不包含 course.COURSE_IDtakes.COURSE_ID不再是了,但只是一个 COURSE_ID

这是无效的:

select course.COURSE_ID from course join takes using(COURSE_ID);

这是有效的:

select COURSE_ID from course join takes using(COURSE_ID);

关于SQL:使用 vs on,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43956604/

相关文章:

sql - 在oracle中将VARCHAR转换为时间

sql - 这两个 SQL Server 查询是否相同?

mysql - 需要计算列中的唯一出现次数,并按日期对结果进行分组

mysql哪里完全匹配

mysql - 将文本列设为唯一键

xml - 转义 Oracle XDB 中的控制字符

mysql - 不等于 <> 查询排除 NULL 值

java - 如何从Android使用谷歌应用程序引擎查询实体?

mysql - 如何获取用户聊天信息

java - SQL如何用一条SQL语句更新表行