2010-05-07 1 views
11

Как я могу исправить проблему, которую я продолжаю получать из кода, ниже которого указывается 'user_id' in where clause is ambiguous. Спасибо за помощь заранее.MySQL 'user_id' в том, где предложение является двусмысленной проблемой

Это таблица mysql.

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

ответ

28

Вам просто нужно указать, какие user_id использовать, так как таблица user_info и user есть поле, называемое user_id:

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

SQL не потерпит эту двусмысленность, так как для того, что он знает, , оба поля могут представлять собой совершенно разные данные.

+0

Но что, если обе таблицы имеют одинаковое имя поля, например, 'create_at' в обеих таблицах? И мы не указываем его в предложении where, и мы хотим получить поле из обеих таблиц с помощью одного и того же пользователя метода. * И user_info. * –

0

Решение состоит в том, чтобы выбирать каждый столбец явно везде. Не используйте пользователя * и user_info * в вашем списке выбора, либо:..

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

Это не совсем правильное решение проблемы, оно просто зависит от выбора одного user_id для устранения двусмысленности. Я лично предпочитаю более общее решение указания таблицы в предложении WHERE, то есть 'WHERE u.user_id = '$ user_id'' – defines

+0

Спасибо. Типографическая ошибка. Исправленный. –

0

Вы должны упоминать имя псевдонима вашего столбца и назначить user_id как

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

Попробуйте это.

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'; 
Смежные вопросы