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?

62
demandé sur vog 2011-07-10 05:08:14

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 .

107
répondu OMG Ponies 2017-05-23 12:18:24

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
15
répondu Taryn 2012-11-23 20:13:23

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

6
répondu halfdan 2011-07-10 01:12:07

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

3
répondu Bryan Legend 2015-05-28 20:34:28

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;
3
répondu M_J 2016-05-25 06:28:54

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

1
répondu vog 2018-06-15 20:21:31

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;
0
répondu Festole 2014-03-23 06:40:39
SELECT tbl_names.id, tbl_names.name, tbl_names.section
  FROM tbl_names, tbl_section 
 WHERE tbl_names.id = tbl_section.id
-1
répondu nikunj 2017-05-22 14:08:59