복붙노트

[SQL] 이유는 무엇입니까이 SQL 코드를주고 오류 1066 (안 독특한 테이블 / 별칭 : '사용자')?

SQL

이유는 무엇입니까이 SQL 코드를주고 오류 1066 (안 독특한 테이블 / 별칭 : '사용자')?

이것은 내 테이블 구조입니다 :

오류 메시지는 다음과 같습니다

다음은 내 코드입니다.

SELECT article.* , section.title, category.title, user.name, user.name
FROM article
INNER JOIN section ON article.section_id = section.id
INNER JOIN category ON article.category_id = category.id
INNER JOIN user ON article.author_id = user.id
LEFT JOIN user ON article.modified_by = user.id
WHERE article.id = '1'

해결법

  1. ==============================

    1.당신은 별칭을 사용자 테이블에게 당신이 그것에 가입 번째 시간을 줄 필요가

    당신은 별칭을 사용자 테이블에게 당신이 그것에 가입 번째 시간을 줄 필요가

    EG

    SELECT article . * , section.title, category.title, user.name, u2.name 
    FROM article 
    INNER JOIN section ON article.section_id = section.id 
    INNER JOIN category ON article.category_id = category.id 
    INNER JOIN user ON article.author_id = user.id 
    LEFT JOIN user u2 ON article.modified_by = u2.id 
    WHERE article.id = '1'
    
  2. ==============================

    2.당신이 있기 때문에 귀하의 오류는 다음과 같습니다

    당신이 있기 때문에 귀하의 오류는 다음과 같습니다

         JOIN user ON article.author_id = user.id
    LEFT JOIN user ON article.modified_by = user.id
    

    당신은 같은 테이블의 두 인스턴스를 가지고 있지만, 데이터베이스는 어떤 확인할 수 없습니다. 이 문제를 해결하려면, 당신은 테이블 별칭을 사용해야합니다 :

         JOIN USER u ON article.author_id = u.id
    LEFT JOIN USER u2 ON article.modified_by = u2.id
    

    그것은 당신이하지 않는 전체 테이블 이름 당신이이 같은 상황이없는 모든 시간을 기록처럼, 당신의 테이블 별명을 항상에 좋은 습관입니다.

    주소 다음 문제가 될 것입니다 :

    SELECT article.* , section.title, category.title, user.name, user.name
    

    1) * SELECT를 사용하지 마십시오 - 항상 전체 테이블 경우에도, 당신이 원하는 열을 밖으로 철자. 이유를 이해하기 위해 SO 질문을 읽어보십시오.

    2) 다시, 데이터베이스에서 데이터를 가져있는 테이블 예를 알 수 없기 때문에 user.name 컬럼에 관한 모호한 열 오류를 얻을 수 있습니다. 테이블 별칭을 사용하여 문제를 해결합니다

    SELECT article.* , section.title, category.title, u.name, u2.name
    
  3. ==============================

    3.당신은 당신의 FROM 절에 두 번 "사용자"를 언급했다. 당신은 각 사용자에 대한 언급 때문에 적어도 하나의 언급에 테이블 별칭을 제공해야합니다. 하나 또는 다른 인스턴스에 고정 할 수 있습니다 :

    당신은 당신의 FROM 절에 두 번 "사용자"를 언급했다. 당신은 각 사용자에 대한 언급 때문에 적어도 하나의 언급에 테이블 별칭을 제공해야합니다. 하나 또는 다른 인스턴스에 고정 할 수 있습니다 :

    FROM article INNER JOIN section
    ON article.section_id = section.id
    INNER JOIN category ON article.category_id = category.id
    INNER JOIN user **AS user1** ON article.author\_id = **user1**.id
    LEFT JOIN user **AS user2** ON article.modified\_by = **user2**.id
    WHERE article.id = '1'
    

    (당신은 뭔가 다른이 필요할 수 있습니다 - 나는 사용자가 SQL 엔진이 추측 할 수없는 어떤하지만, 어떤 추측.)

    또한, 어쩌면 당신은 하나의 "사용자"를 필요로했다. 누가 알아?

  4. ==============================

    4.

        SELECT art.* , sec.section.title, cat.title, use1.name, use2.name as modifiedby
    FROM article art
    INNER JOIN section sec ON art.section_id = sec.section.id
    INNER JOIN category cat ON art.category_id = cat.id
    INNER JOIN user use1 ON art.author_id = use1.id
    LEFT JOIN user use2 ON art.modified_by = use2.id
    WHERE art.id = '1';
    

    이 세력 도움말을 희망

  5. from https://stackoverflow.com/questions/1435177/why-does-this-sql-code-give-error-1066-not-unique-table-alias-user by cc-by-sa and MIT license