where子句中的MySQL“user_id”存在歧义问题

where子句中的MySQL“user_id”存在歧义问题,mysql,mysql-error-1052,Mysql,Mysql Error 1052,下面的代码中where子句中的“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' 您只需指定要使用的用户id,因为用户信息和用户表都有一个名为用户id的字段: SQL不会容忍这种模糊性,因为据它所知,两个字段可以表示完全不同的

下面的代码中where子句中的“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'

您只需指定要使用的用户id,因为用户信息和用户表都有一个名为用户id的字段:


SQL不会容忍这种模糊性,因为据它所知,两个字段可以表示完全不同的数据。

解决方案是在任何地方显式选择每一列。不要在选择列表中使用user.*和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';

您应该提到列的别名,并将其分配给像

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'
试试这个

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';

这并不是问题的正确解决方案,它只是依靠选择一个用户id列来解决歧义。我个人更喜欢在WHERE子句中指定表的更一般的解决方案,即WHERE u.user_id='$user_id',但是如果两个表在两个表中都有相同的字段名,比如'create_at',该怎么办?我们没有在where子句中指定它,我们希望使用相同的方法user.*和user_info.*从两个表中获取字段,因此,在我的例子中,where子句'some_field'缺少表名。比如表\名称。一些\字段
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';