Mysql #1052-列';syear';where子句中的where子句是不明确的

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

当我运行此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.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