1052: Coluna ‘id’ na lista de campos é ambígua

Eu tenho 2 mesas. tbl_section e tbl_section que tem o campo id em si. Como faço para selecionar o campo id , porque sempre recebo este erro:

 1052: Column 'id' in field list is ambiguous 

Aqui está minha consulta:

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

Eu poderia apenas selecionar todos os campos e evitar o erro. Mas isso seria um desperdício no desempenho. O que devo fazer?

   

O SQL suporta a qualificação de uma coluna, prefixando a referência com o nome completo da tabela:

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

… ou um alias de tabela:

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

O alias da tabela é a abordagem recomendada – por que digitar mais do que você precisa?

Por que essas consultas parecem diferentes?

Em segundo lugar, minhas respostas usam a syntax ANSI-92 JOIN (a sua é ANSI-89). Enquanto eles executam o mesmo, a syntax ANSI-89 não suporta junções externas (direita, esquerda, cheia). A syntax ANSI-89 deve ser considerada obsoleta, há muitos em SO que não votarão na syntax ANSI-89 para reforçar isso. Para mais informações, veja esta questão .

Na sua SELECT , você precisa inserir o seu id com a tabela da qual deseja escolher.

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

OU

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

Você faria isso fornecendo um nome totalmente qualificado, por exemplo:

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

Qual daria a você o id de tbl_names

O que você provavelmente está querendo fazer aqui é usar o operador sindical assim:

 (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 

Aqui estão os documentos para isso https://dev.mysql.com/doc/refman/5.0/en/union.html

Já existem muitas respostas para sua pergunta, você pode fazer assim também. Você pode dar à sua tabela um nome de alias e usá-la na consulta de seleção como esta:

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

A solução mais simples é uma junit com USING vez de ON . Dessa forma, o database “sabe” que as duas colunas de id são realmente as mesmas, e não se preocupará com isso:

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

Se id é o único nome de coluna comum em tbl_section e tbl_section , você pode até usar um NATURAL JOIN :

 SELECT id, name, section FROM tbl_names NATURAL JOIN tbl_section 

Veja também: https://dev.mysql.com/doc/refman/5.7/en/join.html

Se o formato dos id’s nas duas tabelas varia, então você quer se juntar a eles, como tal, você pode optar por usar um id de uma tabela principal, digamos se você tiver table_customes e table_orders , e o id para pedidos for como ” 101 “,” 102 “…” 110 “, basta usar um para clientes

 select customers.id, name, amount, date from customers.orders; 
 SELECT tbl_names.id, tbl_names.name, tbl_names.section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id