#1052 - 列'syear'在where子句中含糊

问题描述:

当我运行这个SQL时会出现这个错误。 #1052 - Column 'syear' in where clause is ambiguous。任何一个给我答案。#1052 - 列'syear'在where子句中含糊

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 
+1

这意味着FROM子句中的两个语句都有一个名为“syear”的列,因此,要使用该列,必须指定表名,就像您对其他列进行操作一样:尝试使用courses.syear或course_subjects。 SYEAR。 – Spock

+0

人们不禁要问,为什么你在两张桌子上都有这样的专栏! – Strawberry

您的查询应该是这个样子:

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被存储为一个数字而不是字符串。不要把字符串常量放在引号内。
+0

这是行得通的。谢谢 – loke2

+0

对你的陈述“在FROM子句中不使用逗号”感兴趣,它可能更清晰但是还有其他原因吗? –

+1

@NigelRen“更清晰”是足够的理由,但除此之外;逗号符号不那么强大,并且近二十年来通常已经不受欢迎。 _clearer =易读=易维护=少bugs_ – Uueerdo

您的表中有一列名为syear的列,并且数据库引擎不知道选择哪一列。

添加的表名前

course_subjects.syear 

此外,你不应该使用旧的隐式连接语法了。

+0

@juegen这也是工作 – loke2