2010-05-07 18 views
11

¿Cómo puedo corregir el problema que sigo recibiendo del código a continuación que indica 'user_id' in where clause is ambiguous. Gracias por la ayuda por adelantado.MySQL 'user_id' en donde la cláusula es un problema ambiguo

Aquí está la tabla mysql.

SELECT user.*, user_info.* 
FROM user 
INNER JOIN user_info ON user.user_id = user_info.user_id 
WHERE user_id='$user_id' 

Respuesta

28

Usted sólo tendrá que especificar qué user_id de usar, ya que tanto la tabla user_info y user tiene un campo llamado user_id:

... WHERE user.user_id='$user_id' 

SQL no toleraría esta ambigüedad, ya que por lo que sabe , ambos campos pueden representar datos totalmente diferentes.

+0

Pero, ¿qué ocurre si ambas tablas tienen el mismo nombre de campo como 'create_at' en ambas tablas? Y no lo especificamos en la cláusula where y queremos buscar el campo de ambas tablas con el mismo usuario de método. * Y user_info. * –

0

La solución es seleccionar cada columna explícitamente en todas partes. No utilice el usuario * y * user_info en su lista de selección, ya sea:..

SELECT u.user_id, u.user_fudge, ui.foo, ui.bar 
FROM user u 
INNER JOIN user_info ui 
    ON ui.user_id = u.user_id 
WHERE u.user_id = '$user_id'; 
+1

Esto no es realmente una solución correcta al problema, simplemente depende de seleccionar un solo user_id columna para resolver la ambigüedad. Yo personalmente prefiero la solución más general de especificar la tabla en la cláusula WHERE, es decir 'WHERE u.user_id = '$ user_id'' – defines

+0

Gracias. Error tipográfico. Corregido –

0

Usted debe haber mención nombre de alias de la columna y asignar a USER_ID como

SELECT user.*, user_info.* 
FROM user as u 
INNER JOIN user_info as ui ON u.user_id = ui.user_id 
WHERE u.user_id='$user_id' 
0

Prueba esto.

SELECT u.user_id, u.user_fudge, ui.foo, ui.bar 
FROM user AS u 
INNER JOIN user_info AS ui 
    ON ui.user_id = u.user_id 
WHERE u.user_id = '$user_id';