在连接查询时,如果给表添加了别名,在where条件中只能使用 (别名.字段名)来找到字段,不能用 (表名.字段名) 比如
select * from t_user newname where t_user.user_id>1 报错 找不到字段
但是select * from t_user newname where newname.user_id>1 可以正常查询,这个是什么原因?
select * from t_user newname where t_user.user_id>1 报错 找不到字段
但是select * from t_user newname where newname.user_id>1 可以正常查询,这个是什么原因?
1、怀疑是创建了临时表,所以原来的表名无效。用explain,没有这一个,所以排除
2、通过explain 看到table列变为表别名了,可能是将原来的表名覆盖,类似与c的赋值。
3、开始我以为是类似c的赋值即两个指向了相同的地址,但是找不到字段这个错误让我感觉不是这么回事。
现在问下同事
等更
我试了其他的数据库,比如sql server,也会报错。所以我想这个应该是一个标准,当sql语句发送到服务器上后,数据库就会对sql语句进行标准化,语法检查等操作,而这个表的名称已经重新定义为 别称了