Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:在上使用vs 问题_Sql_Database_Oracle - Fatal编程技术网

SQL:在上使用vs 问题

SQL:在上使用vs 问题,sql,database,oracle,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)

让我为您提供查询中使用的表的描述

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);
我得到的错误是

命令行1列8处出错 错误报告- SQL错误:ORA-25154:USING子句的列部分不能有限定符 2515400000-“USING子句的列部分不能有限定符” *原因:用于命名联接(或自然联接)的列 或带有USING子句的联接)不能有显式限定符。 *操作:删除限定符

而如果我在选择除course.course\u ID之外的其他内容后更改属性,如 课程名称如下:

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

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

错误消息说明了一切:当使用
使用(课程ID)
时,您的行不包含
课程。课程ID
不再需要。课程ID
,但仅仅是
课程ID

这是无效的:

select course.COURSE_ID from course join takes using(COURSE_ID);
这是有效的:

select COURSE_ID from course join takes using(COURSE_ID);

错误消息说明了一切:当使用
using(COURSE\u ID)
时,您的行不再包含
COURSE.COURSE\u ID
takes.COURSE\u ID
,而仅仅是
COURSE\u ID

这是无效的:

select course.COURSE_ID from course join takes using(COURSE_ID);
这是有效的:

select COURSE_ID from course join takes using(COURSE_ID);

不客气。顺便说一句:由于这个原因,我不经常使用
use
。当您必须添加一些子查询(例如exists子句)时,您不能限定有问题的列<但是,代码>使用对于多个完整外部联接非常有用:
使用(col1)从完整外部联接b中选择col1、a.col2、b.col3、c.col4使用(col1)从完整外部联接c中选择(col1)
。如果使用ON子句,这看起来会复杂得多。欢迎您。顺便说一句:由于这个原因,我不经常使用
use
。当您必须添加一些子查询(例如exists子句)时,您不能限定有问题的列<但是,代码>使用对于多个完整外部联接非常有用:
使用(col1)从完整外部联接b中选择col1、a.col2、b.col3、c.col4使用(col1)从完整外部联接c中选择(col1)
。如果使用ON子句,这看起来要复杂得多。