복붙노트

[SQL] 1052 : 필드 목록에서 열 'ID는'모호

SQL

1052 : 필드 목록에서 열 'ID는'모호

난 2 개 테이블. 이들의 id 필드 모두 가지고 tbl_names 및 tbl_section. 어떻게 항상이 오류 때문에 나는, id 필드를 선택 가야합니까 :

1052: Column 'id' in field list is ambiguous

여기 내 쿼리는 다음과 같습니다

SELECT id, name, section
  FROM tbl_names, tbl_section 
 WHERE tbl_names.id = tbl_section.id

난 그냥 모든 필드를 선택하고 오류를 방지 할 수있다. 하지만 성능이 낭비 될 것이다. 어떻게해야합니까?

해결법

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

    1.중 전체 테이블 이름으로 참조를 앞에 붙여 열을 자격을 갖춘 SQL 지원 :

    중 전체 테이블 이름으로 참조를 앞에 붙여 열을 자격을 갖춘 SQL 지원 :

    SELECT tbl_names.id, tbl_section.id, name, section
      FROM tbl_names
      JOIN tbl_section ON tbl_section.id = tbl_names.id 
    

    ... 또는 테이블 별칭 :

    SELECT n.id, s.id, n.name, s.section
      FROM tbl_names n
      JOIN tbl_section s ON s.id = n.id 
    

    왜 당신이이보다 더 많은 입력 - 테이블 별칭은 권장되는 방법입니다?

    둘째, 내 대답은 ANSI-92 (당신은 ANSI-89입니다) JOIN 구문을 사용합니다. 그들은 같은, ANSI-89 구문은 지원하지 않습니다 수행하는 동안 OUTER은 (RIGHT, LEFT, FULL)를 결합한다. ANSI-89 구문은 그것을 강화하기 위해 ANSI-89 구문 투표하지 누가 SO에 많은가, 사용되지 고려되어야한다. 자세한 내용은이 질문을 참조하십시오.

  2. ==============================

    2.당신의 SELECT 문에 당신은 당신이에서 선택하려는 테이블로 ID를 서문을해야합니다.

    당신의 SELECT 문에 당신은 당신이에서 선택하려는 테이블로 ID를 서문을해야합니다.

    SELECT tbl_names.id, name, section 
    FROM tbl_names
    INNER JOIN tbl_section 
       ON tbl_names.id = tbl_section.id
    

    또는

    SELECT tbl_section.id, name, section 
    FROM tbl_names
    INNER JOIN tbl_section 
       ON tbl_names.id = tbl_section.id
    
  3. ==============================

    3.당신은 예컨대, 정규화 된 이름을 제공하여 그렇게 할 것입니다 :

    당신은 예컨대, 정규화 된 이름을 제공하여 그렇게 할 것입니다 :

    SELECT tbl_names.id as id, name, section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id
    

    당신에게 tbl_names의 ID를 줄 것이다

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

    4.당신이 아마 정말 여기에서하고자하는 것은이 같은 노조의 연산자를 사용하는 것입니다 :

    당신이 아마 정말 여기에서하고자하는 것은이 같은 노조의 연산자를 사용하는 것입니다 :

    (select ID from Logo where AccountID = 1 and Rendered = 'True')
      union
      (select ID from Design where AccountID = 1 and Rendered = 'True')
      order by ID limit 0, 51
    

    여기에 대한 문서를의 https://dev.mysql.com/doc/refman/5.0/en/union.html

  5. ==============================

    5.이미 귀하의 질문에 대한 답변을 많이가있다, 당신은이를 좋아 할 수 있습니다. 당신은 당신의 테이블을 별칭 이름과 사용을 줄 수있는이 같은 선택 쿼리 :

    이미 귀하의 질문에 대한 답변을 많이가있다, 당신은이를 좋아 할 수 있습니다. 당신은 당신의 테이블을 별칭 이름과 사용을 줄 수있는이 같은 선택 쿼리 :

    SELECT a.id, b.id, name, section
    FROM tbl_names as a 
    LEFT JOIN tbl_section as b ON a.id = b.id;
    
  6. ==============================

    6.가장 간단한 해결책은이 ON 대신 사용하여 조인. 그런 식으로, 데이터베이스가 모두 ID 열이 실제로 동일 것을 "알고있다"것에하지 nitpick :

    가장 간단한 해결책은이 ON 대신 사용하여 조인. 그런 식으로, 데이터베이스가 모두 ID 열이 실제로 동일 것을 "알고있다"것에하지 nitpick :

    SELECT id, name, section
      FROM tbl_names
      JOIN tbl_section USING (id)
    

    ID가 tbl_names 및 tbl_section의 유일한 공통 열 이름 인 경우도 NATURAL JOIN을 사용할 수 있습니다 :

    SELECT id, name, section
      FROM tbl_names
      NATURAL JOIN tbl_section
    

    참조 : https://dev.mysql.com/doc/refman/5.7/en/join.html

  7. ==============================

    7.아이디의 형식은 다음 두 표에 차이가 있다면 당신은 같은 당신이 한 기본 테이블에서 ID를 사용하도록 선택할 수 있습니다, 그들과 합류 할 당신이 table_customes 및 table_orders이 있으면 말을하고, 주문 그쪽 ID가 101 "처럼 ","102 "..."110 "단지 고객을위한 하나를 사용

    아이디의 형식은 다음 두 표에 차이가 있다면 당신은 같은 당신이 한 기본 테이블에서 ID를 사용하도록 선택할 수 있습니다, 그들과 합류 할 당신이 table_customes 및 table_orders이 있으면 말을하고, 주문 그쪽 ID가 101 "처럼 ","102 "..."110 "단지 고객을위한 하나를 사용

    select customers.id, name, amount, date from customers.orders;
    
  8. ==============================

    8.

    SELECT tbl_names.id, tbl_names.name, tbl_names.section
      FROM tbl_names, tbl_section 
     WHERE tbl_names.id = tbl_section.id
    
  9. from https://stackoverflow.com/questions/6638520/1052-column-id-in-field-list-is-ambiguous by cc-by-sa and MIT license