복붙노트

[SQL] 명시 적 및 암시 조인 혼합은 "이 테이블에 대한 항목은 ...하지만이 쿼리의이 부분에서 참조 할 수 없습니다"와 함께 실패

SQL

명시 적 및 암시 조인 혼합은 "이 테이블에 대한 항목은 ...하지만이 쿼리의이 부분에서 참조 할 수 없습니다"와 함께 실패

SELECT
      i.*, 
      r.name AS roomname, 
      c.name AS cat, 
      p.key AS imgkey, 
      p.extension AS imgext
   FROM 
      items i, 
      rooms r, 
      categories c 
         LEFT JOIN photos p 
            ON p.referencekey = i.key 
   WHERE 
          i.room = r.key 
      AND r.key = 663308 
      AND i.sitekey = 32201 
      AND c.key = i.categorykey

실행 반환 오류를 다음 위의 쿼리.

해결법

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

    1.당신의 Items.Room = Rooms.Key 때문에, 난 그냥과 어디 것이다 ..

    당신의 Items.Room = Rooms.Key 때문에, 난 그냥과 어디 것이다 ..

    SELECT
          i.*, 
          r.name AS roomname, 
          c.name AS cat, 
          p.key AS imgkey, 
          p.extension AS imgext
       FROM 
          items i
             LEFT JOIN photos p 
                ON p.referencekey = i.key 
             JOIN rooms r
                on i.room = r.key
             JOIN categories c 
                on i.categorykey = c.key
       WHERE 
              i.sitekey = 32201 
          AND i.room = 663308 
    
  2. ==============================

    2.암시 적 조인하기 전에 명시 적 조인하는 SQL 사양 상태가 수행됩니다. 이 암시 가입입니다 :

    암시 적 조인하기 전에 명시 적 조인하는 SQL 사양 상태가 수행됩니다. 이 암시 가입입니다 :

    FROM table1 t1, table2 t2 WHERE t1.id=t2.t1id
    

    이는 명시 적 조인 :

    FROM table1 t1 JOIN table2 t2 ON (t1.id=t2.t1id)
    

    이 코드 비트 :

    categories c 
         LEFT JOIN photos p 
            ON p.referencekey = i.key 
    

    명시 적 조인 먼저 실행됩니다. 나는 아직 보았다되지 않았기 때문에 아직 가입하지 수 있도록이 시점에서 테이블, 별칭이 있습니다. MySQL은 내가 믿는 5.2에서이 문제를 해결하고, 하나가이 쿼리가 더 이상 작동하지 않습니다.

  3. ==============================

    3.당신이에 합류 테이블 옆에 가입 문을 이동 :

    당신이에 합류 테이블 옆에 가입 문을 이동 :

    SELECT
          i.*, 
          r.name AS roomname, 
          c.name AS cat, 
          p.key AS imgkey, 
          p.extension AS imgext
       FROM 
          items i
             LEFT JOIN photos p 
                ON p.referencekey = i.key, 
          rooms r, 
          categories c 
       WHERE 
              i.room = r.key 
          AND r.key = 663308 
          AND i.sitekey = 32201 
          AND c.key = i.categorykey
    

    긴 설명 :

    A는 가입 소스 테이블에서 결과하는 여기서 from_item으로 FROM 절에서 사용 된 표현의 일부분이다. 귀하의 FROM 절은 3 개 여기서 from_item 소스 테이블이 있습니다 :

    이 오류는 사진 여기서 from_item에 가입하여 카테고리의 ON join_condition입니다. 당신은 여기서 from_item에 존재하지 않는 테이블 항목을 참조한다. 이 솔루션은 항목이 여기서 from_item에 사진 가입 이동하는 것입니다, 그래서 당신은 다음과 같은 여기서 from_item 소스 테이블을 가지고 :

    슬프게도, 나는 차종이 FROM 절에서 테이블 사이의 관계를 지우고가 가입하는 문서에서 예를 찾을 수 없습니다. 선택 시놉시스이 구문을 보여줍니다이 차이를 찾을 수있는 문서에 가장 좋은 소스입니다. A는 가입 통지는 형제 FROM에 절을하지만 FROM 절 내에서 여기서 from_item 실제로 일부가 아닙니다. 당신의 FROM 절은 테이블의 목록으로 구성하는 경우 따라서, 해당 목록의 각 테이블 자체 조인 할 수 있습니다. 그런 다음 각 테이블은 단일 여기서 from_item에 포함되어야 조인에 참여하는 것이 더 직관적된다.

  4. from https://stackoverflow.com/questions/6347897/mixing-explicit-and-implicit-joins-fails-with-there-is-an-entry-for-table-b by cc-by-sa and MIT license