unir tablas promocionado objeto nombre inner hacer con como columna campos ambiguos ambiguo ambiguedad ambigua mysql sql database join mysql-error-1052

mysql - tablas - inner join



1052: la ''id'' de columna en la lista de campos es ambigua (8)

En su declaración SELECT , debe introducir su identificación con la tabla de la que desea elegir.

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

O

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

Tengo 2 tablas. tbl_names y tbl_section que tienen tanto el campo id en ellos. ¿Cómo hago para seleccionar el campo de id porque siempre obtengo este error?

1052: Column ''id'' in field list is ambiguous

Aquí está mi consulta:

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

Podría simplemente seleccionar todos los campos y evitar el error. Pero eso sería un desperdicio en el rendimiento. ¿Que debería hacer?


Haría eso proporcionando un nombre completo, por ejemplo:

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

Lo cual le daría la identificación de tbl_names


La solución más simple es una unión con USING lugar de ON . De esta forma, la base de datos "sabe" que ambas columnas de id son en realidad iguales, y no se percatará de eso:

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

Si id es el único nombre de columna común en tbl_names y tbl_section , incluso puedes usar NATURAL JOIN :

SELECT id, name, section FROM tbl_names NATURAL JOIN tbl_section

Ver también: https://dev.mysql.com/doc/refman/5.7/en/join.html


Lo que probablemente quiera hacer aquí es usar el operador de la unión de la siguiente manera:

(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

Aquí están los documentos https://dev.mysql.com/doc/refman/5.0/en/union.html


SQL admite calificar una columna prefijando la referencia con el nombre completo de la tabla:

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

... o un alias de tabla:

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

El alias de tabla es el enfoque recomendado, ¿por qué escribir más de lo necesario?

¿Por qué estas consultas se ven diferentes?

En segundo lugar, mis respuestas utilizan la sintaxis ANSI-92 JOIN (la suya es ANSI-89). Mientras realizan lo mismo, la sintaxis ANSI-89 no es compatible con las uniones OUTER (DERECHA, IZQUIERDA, LLENA). La sintaxis ANSI-89 se debe considerar obsoleta, hay muchos en SO que no votarán por la sintaxis ANSI-89 para reforzar eso. Para más información, vea esta pregunta .


Si el formato de los identificadores en las dos tablas varía y quiere unirlos, como tal, puede seleccionar usar un ID de una tabla principal, por ejemplo, si tiene table_customes y table_orders , y table_orders id para pedidos es como " 101 "," 102 "..." 110 ", solo use uno para clientes

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


Ya hay muchas respuestas a su pregunta, puede hacerlo así también. Puede darle a su tabla un nombre de alias y usarlo en la consulta de selección 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;


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