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子句,这看起来要复杂得多。