1052: la colonne 'id' dans la liste des Champs est ambiguë
j'ai 2 tables. tbl_names
et tbl_section
qui ont à la fois le champ id
en eux. Comment faire pour sélectionner le champ id
, car j'obtiens toujours cette erreur:
1052: Column 'id' in field list is ambiguous
voici ma requête:
SELECT id, name, section
FROM tbl_names, tbl_section
WHERE tbl_names.id = tbl_section.id
je pouvais juste sélectionner tous les champs et éviter l'erreur. Mais ce serait une perte de performance. Que dois-je faire?
8 réponses
SQL soutient qualifiant une colonne en préfixant la référence avec soit le nom complet de la table:
SELECT tbl_names.id, tbl_section.id, name, section
FROM tbl_names
JOIN tbl_section ON tbl_section.id = tbl_names.id
...ou un pseudonyme de table:
SELECT n.id, s.id, n.name, s.section
FROM tbl_names n
JOIN tbl_section s ON s.id = n.id
la table alias est l'approche recommandée -- pourquoi taper plus que nécessaire?
Pourquoi Ces Requêtes Semblent Différentes?
Deuxièmement, mes réponses utilisent la syntaxe de jointure ANSI-92 (la vôtre est ANSI-89). Alors qu'ils exécutent la même syntaxe, ANSI-89 ne ne supporte pas les jointures externes (droite, gauche, pleine). La syntaxe ANSI-89 devrait être considérée comme dépréciée, il y en a beaucoup sur SO qui ne voteront pas pour la syntaxe ANSI-89 pour renforcer cela. Pour pour en savoir plus, lisez la question .
dans votre déclaration SELECT
vous devez préfacer votre pièce d'identité avec la table que vous voulez choisir.
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
vous feriez cela en fournissant un nom entièrement qualifié, par exemple:
SELECT tbl_names.id as id, name, section FROM tbl_names, tbl_section WHERE tbl_names.id = tbl_section.id
qui vous donnerait l'id de tbl_names
ce que vous voulez probablement vraiment faire ici est d'utiliser l'opérateur de l'union comme ceci:
(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
Voici les docs pour ça https://dev.mysql.com/doc/refman/5.0/en/union.html
il y a déjà beaucoup de réponses à votre question, vous pouvez le faire comme cela aussi. Vous pouvez donner à votre table un nom d'alias et l'utiliser dans la requête select comme ceci:
SELECT a.id, b.id, name, section
FROM tbl_names as a
LEFT JOIN tbl_section as b ON a.id = b.id;
la solution la plus simple est une jonction avec USING
au lieu de ON
. De cette façon, la base de données "sait" que les deux colonnes id
sont en fait les mêmes, et ne va pas pinailler sur cela:
SELECT id, name, section
FROM tbl_names
JOIN tbl_section USING (id)
si id
est le seul nom de colonne commun dans tbl_names
et tbl_section
, vous pouvez même utiliser un NATURAL JOIN
:
SELECT id, name, section
FROM tbl_names
NATURAL JOIN tbl_section
Voir aussi: https://dev.mysql.com/doc/refman/5.7/en/join.html
si le format des id dans les deux tables varie alors vous voulez les rejoindre, en tant que tel vous pouvez sélectionner d'utiliser un id à partir d'une table principale, dire si vous avez table_customes
et table_orders
, et que l'id pour les commandes est comme " 101 "," 102 "..." 110 ", il suffit d'utiliser un pour les clients
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