SQL连接具有不明确的列
我正在尝试连接几个表,以生成具有先决条件的类的列表。 除了我需要先决条件和原始类的类名之外,一切都很好 到目前为止我有SQL连接具有不明确的列,sql,oracle,Sql,Oracle,我正在尝试连接几个表,以生成具有先决条件的类的列表。 除了我需要先决条件和原始类的类名之外,一切都很好 到目前为止我有 SELECT course_name, c.course_number, course_name, prereq FROM rearp.course c, rearp.prereq p WHERE c.course_number = p.course_number; 这给了我(你已经看到一个问题,课程名称在那里有两次[不知道如何处理它否则]) 课程名称(好的,很好) 班级(
SELECT course_name, c.course_number, course_name, prereq
FROM rearp.course c, rearp.prereq p
WHERE c.course_number = p.course_number;
这给了我(你已经看到一个问题,课程名称在那里有两次[不知道如何处理它否则])
- 课程名称(好的,很好)
- 班级(是的)
- 请再说一遍课程名称(等等,那是同一个名称!)
- 先决条件(好)
我的问题是我无法获得匹配的名称。使用别名,并确保始终在字段列表中包含表名:
SELECT
c.course_name,
c.course_number,
p.course_name AS prereq_course_name,
p.prereq
FROM rearp.course AS c, rearp.prereq AS p
WHERE c.course_number = p.course_number
另外,请使用有意义的表别名而不是单个字母,并尝试使用实际联接而不是隐式联接。如果您使用的是MySQL,那么连接将是交叉连接,这是低效且不必要的
编辑:在字段列表中添加逗号…使用别名,并确保始终在字段列表中包含表名:
SELECT
c.course_name,
c.course_number,
p.course_name AS prereq_course_name,
p.prereq
FROM rearp.course AS c, rearp.prereq AS p
WHERE c.course_number = p.course_number
另外,请使用有意义的表别名而不是单个字母,并尝试使用实际联接而不是隐式联接。如果您使用的是MySQL,那么连接将是交叉连接,这是低效且不必要的
编辑:在字段列表中添加逗号…BTW:这是一个实际的
内部联接
,但使用不同的语法,它是ANSI SQL-89联接语法。但正如你所说,这是不推荐的。如果删除where子句,它将是交叉连接。更多细节请参见。哦,是的,没错。我忘记了,在MySQL中,如果没有连接条件,则内部和交叉是相同的。愚蠢的语法,真的,但它是什么。这个问题与p仍然试图找出一个问题why@wat:这可能是因为我忘记了第4行的逗号。错误:ORA-00904:“P”。“课程名称”:无效标识符hmmmBTW:这是一个实际的内部联接
,但使用不同的语法,它是ANSI SQL-89联接语法。但正如你所说,这是不推荐的。如果删除where子句,它将是交叉连接。更多细节请参见。哦,是的,没错。我忘记了,在MySQL中,如果没有连接条件,则内部和交叉是相同的。愚蠢的语法,真的,但它是什么。这个问题与p仍然试图找出一个问题why@wat:可能是因为我忘记了第4行的逗号。错误:ORA-00904:“P”。“课程名称”:无效标识符hmmm