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