J'ai 2 tables. tbl_names
et tbl_section
qui a à la fois le id
champ en eux. Comment puis-je sélectionner le id
champ, 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 pourrais simplement sélectionner tous les champs et éviter l'erreur. Mais ce serait un gaspillage de performances. Que devrais-je faire?
INNER JOIN
comme «déprécié» depuis l'introduction de SQL-92NATURAL JOIN
.Dans votre
SELECT
déclaration, vous devez faire précéder votre identifiant du tableau dans lequel vous souhaitez le choisir.OU
la source
id
champs; l'OP déclare «il suffit de sélectionner tous les champs et d'éviter l'erreur». Et je ne vote pas pour la syntaxe ANSI-89.Vous feriez cela en fournissant un nom complet, par exemple:
Ce qui vous donnerait l'identifiant de tbl_names
la source
FROM
clause...FROM tbl_names tbl_names, tbl_section tbl_section WHERE...
- c'est ce que fait l'analyseur pour générer une variable de plage.La solution la plus simple est une jointure avec
USING
au lieu deON
. De cette façon, la base de données "sait" que les deuxid
colonnes sont en fait les mêmes et ne s'en occupera pas:Si
id
est le seul nom de colonne courant danstbl_names
ettbl_section
, vous pouvez même utiliser unNATURAL JOIN
:Voir aussi: https://dev.mysql.com/doc/refman/5.7/en/join.html
la source
Ce que vous voulez probablement vraiment faire ici, c'est utiliser l'opérateur union comme ceci:
Voici la documentation pour cela https://dev.mysql.com/doc/refman/5.0/en/union.html
la source
Il y a déjà beaucoup de réponses à votre question, vous pouvez le faire comme ça aussi. Vous pouvez donner à votre table un nom d'alias et l'utiliser dans la requête de sélection comme ceci:
la source
Si le format des identifiants dans les deux tables varie, vous souhaitez les joindre, vous pouvez donc choisir d'utiliser un identifiant d'une table principale, par exemple si vous avez
table_customes
ettable_orders
, et que l'identifiant des commandes est comme " 101 ", " 102 " ... " 110 ", utilisez-en un pour les clientsla source
la source