2017-05-05 1 views
1

이 SQL을 실행하면이 오류가 표시됩니다. #1052 - Column 'syear' in where clause is ambiguous. 어느 누구도 대답 해줘.# 1052 - where 절에 '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; 

참고 :

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

귀하의 쿼리는 다음과 같은 것을 보여야 FROM 절에

  • 결코 사용 쉼표. 항상은 적절하고 명시적인 JOIN 구문을 사용합니다.
  • 특히 쿼리가 두 개 이상의 테이블을 참조하는 경우 모든 열 이름을 한정하십시오.
  • syear이 문자열이 아닌 숫자로 저장되어 있다고 가정합니다. 문자열 상수를 따옴표로 묶지 마십시오.
+0

이 작업 중입니다. 감사합니다. – loke2

+0

'FROM 절에 쉼표를 사용하지 마십시오'라는 문구에 관심이 있었는데, 더 명확 할 수는 있지만 다른 이유가 있습니까? –

+1

@NigelRen "명확한"이유는 충분합니다. 쉼표 표기법은 덜 강력하고 거의 20 년 동안 일반적으로 유리하지 않았습니다. _clearer = 읽기 쉽다 = 유지하기 쉽다 = 덜 버그 _ – Uueerdo

1

두 테이블 모두에 syear이라는 열이 있고 DB 엔진은 선택할 수있는 열을 가지고 있지 않습니다. 그것은 그 외에

course_subjects.syear 

당신이 더 이상 이전에 가입 암시 적 구문을 사용하지 말아야 전에

테이블 이름을 추가합니다.

+0

@juegen 이것도 가능합니다. – loke2

관련 문제