2010-07-12 6 views
8

je les suivantes SQL et il jette l'erreur nom de la colonne Ambigu « id »nom de la colonne Ambigu

select tbl_registration.*, tbl_ebp.name as ebp_name, tbl_Users.id as user_id, tbl_ebp.id as linked_ebp_id 
from tbl_registration 
left outer join tbl_ebp on tbl_ebp.id = tbl_registration.ebp_id 
left outer join tbl_users on tbl_registration.email = tbl_users.username 
where id = [PARAM]p_id 

J'ai lu quelques articles à ce sujet, mais ne peut pas trouver une solution de travail pour mon code. Toute aide très appréciée.

Répondre

21

WHERE id article doit être inclure plus spécifique, le nom de la table:

WHERE table.id = [PARAM]p_id 

Si deux choses partagent le même nom, c'est là que les étapes d'ambiguïté dans Dans ce cas, plusieurs tables dans votre SQL. contient la colonne "id". SQL a l'intelligence de désambiguïser les noms de colonne si le nom de la colonne est unique dans l'ensemble des tables en cours de traitement. Ainsi, la plupart du temps, vous n'avez pas besoin de préfixer les noms de colonnes avec les noms de tables.

+2

Personnellement, je préfère toujours spécifier quelle table le champ est venu. Cela rend la maintenance beaucoup plus facile, en particulier lorsqu'il s'agit de requêtes complexes de type reporting qui se joignent à dix tables différentes. De cette façon, je sais d'où vient le champ si c'est celui qui me pose un problème sans avoir à chercher la structure de dix tables différentes pour savoir d'où ça vient. – HLGEM

6

probablement plus d'une table a une colonne nommée id; utiliser un préfixe de table dans la clause where

4

Avez-vous essayé de préfixer le nom de colonne id dans la clause where?

2

Cela fait référence à "id" dans votre clause where. Vous devez spécifier quel "id" de la table il doit filtrer.

0

J'ai remplacé votre code

select *, tbl_ebp.name as ebp_name, tbl_Users.id as user_id, tbl_ebp.id as linked_ebp_id 
from tbl_registration 
left outer join tbl_ebp on tbl_ebp.id = tbl_registration.ebp_id 
left outer join tbl_users on tbl_registration.email = tbl_users.username 
where your_respective_tblname.id = your_respective_tblname.[PARAM]p_id 
Questions connexes