2017-05-05 69 views
1

當我運行這個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

回答

2

您的查詢應該是這個樣子:

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

1

您的表中有一列名爲syear的列,並且數據庫引擎不知道選擇哪一列。

添加的表名前

course_subjects.syear 

此外,你不應該使用舊的隱式連接語法了。

+0

@juegen這也是工作 – loke2