Mysql #1052-列';syear';where子句中的where子句是不明确的
当我运行此SQL时,将出现此错误。Mysql #1052-列';syear';where子句中的where子句是不明确的,mysql,sql,Mysql,Sql,当我运行此SQL时,将出现此错误。 #1052-where子句中的'syear'列不明确。任何人都给我答案 SELECT c.course_id , c.TITLE , c.SHORT_NAME , cs.overallmark FROM courses c , course_subjects cs WHERE syear = '2010' AND c.subject_id = cs.subject_id ORDER BY c
#1052-where子句中的'syear'列不明确
。任何人都给我答案
SELECT c.course_id
, c.TITLE
, c.SHORT_NAME
, cs.overallmark
FROM courses c
, course_subjects cs
WHERE syear = '2010'
AND c.subject_id = cs.subject_id
ORDER
BY c.course_id
, c.TITLE
, c.SHORT_NAME
, cs.overallmark
您的查询应该如下所示:
SELECT c.course_id, c.TITLE, c.SHORT_NAME, cs.overallmark
FROM courses c JOIN
course_subjects cs
ON c.subject_id = cs.subject_id
WHERE c.syear = 2010
ORDER BY c.course_id, c.TITLE, c.SHORT_NAME, cs.overallmark;
注:
- 切勿在
子句中使用逗号。始终使用正确、明确的FROM
语法JOIN
- 限定所有列名,尤其是当查询引用多个表时
- 我假设
存储为数字而不是字符串。不要在字符串常量周围加引号syear
SELECT c.course_id, c.TITLE, c.SHORT_NAME, cs.overallmark
FROM courses c JOIN
course_subjects cs
ON c.subject_id = cs.subject_id
WHERE c.syear = 2010
ORDER BY c.course_id, c.TITLE, c.SHORT_NAME, cs.overallmark;
注:
- 切勿在
子句中使用逗号。始终使用正确、明确的FROM
语法JOIN
- 限定所有列名,尤其是当查询引用多个表时
- 我假设
存储为数字而不是字符串。不要在字符串常量周围加引号syear
syear
,DB引擎不知道选择哪一列
在其前面添加表名
course_subjects.syear
此外,您不应该再使用旧的隐式连接语法。在两个表中都有一个名为
syear
的列,而DB引擎不知道选择哪一个
在其前面添加表名
course_subjects.syear
此外,您不应再使用旧的隐式联接语法。这意味着FROM子句中的两个Thable都有一个名为“syear”的列,因此,要使用该列,必须指定表的名称,与其他列一样:尝试使用courses.syear或courses\u subjects.syear。人们不禁要问,为什么这两个表中都有这样一个列!这意味着您的FROM子句中的两个thable都有一个名为“syear”的列,因此,要使用该列,您必须指定表的名称,就像您对其他列所做的那样:尝试使用courses.syear或courses_subjects.syear!我对你的陈述“在FROM子句中永远不要使用逗号”很感兴趣,这可能更清楚,但还有其他原因吗?@NigelRen“更清楚”是足够的理由,但除此之外;逗号符号功能较弱,近二十年来一直不受欢迎。更清晰=更容易阅读=更容易维护=对您的语句“在FROM子句中永远不要使用逗号”感兴趣的bug更少,它可能更清晰,但还有其他原因吗?@NigelRen“clear”确实是足够的理由,但除此之外;逗号符号功能较弱,近二十年来一直不受欢迎。更清晰=更容易阅读=更容易维护=更少的bug