[mysql] 1052 : 필드 목록의 ‘id’열이 모호합니다.

2 개의 테이블이 있습니다. tbl_names그리고 tbl_section이는 모두가 id그들에 필드. 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

모든 필드를 선택하고 오류를 피할 수 있습니다. 그러나 그것은 성능의 낭비입니다. 어떻게해야합니까?



답변

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 JOIN 구문을 사용합니다 (당신은 ANSI-89입니다). 동일한 기능을 수행하지만 ANSI-89 구문은 OUTER 조인 (RIGHT, LEFT, FULL)을 지원하지 않습니다. ANSI-89 구문은 더 이상 사용되지 않는 것으로 간주되어야하며,이를 강화하기 위해 ANSI-89 구문에 투표하지 않는 사람들이 많이 있습니다. 자세한 내용은이 질문을 참조하십시오 .


답변

당신의 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


답변

정규화 된 이름을 제공하면됩니다. 예 :

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

tbl_names의 ID를 제공합니다.


답변

가장 간단한 해결책은 함께 조인 USING대신 ON. 이렇게하면 데이터베이스는 두 id열이 실제로 동일 하다는 것을 “인식”하고 이에 대해 꼼꼼하게 파악하지 않습니다.

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

경우 id의 유일한 공통 열 이름 tbl_namestbl_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


답변

여기서 정말로하고 싶은 것은 다음과 같은 통합 연산자를 사용하는 것입니다.

(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


답변

이미 질문에 대한 많은 답변이 있습니다. 이렇게 할 수도 있습니다. 테이블에 별칭 이름을 지정하고 다음과 같이 선택 쿼리에서 사용할 수 있습니다.

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


답변

두 테이블에있는 ID의 형식이 다른 경우이를 조인 할 수 있습니다. 따라서 하나의 기본 테이블에서 ID를 사용하도록 선택할 수 있습니다 (예 : table_customesand 가 있고 table_orders주문의 ID는 ” 101 ” 과 같음 ). ” 102 “… ” 110 “, 고객 용으로 사용

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