在连接查询时,如果给表添加了别名,在where条件中只能使用 (别名.字段名)来找到字段,不能用 (表名.字段名) 比如
select * from t_user newname where t_user.user_id>1   报错 找不到字段
但是select * from t_user newname where newname.user_id>1  可以正常查询,这个是什么原因?

解决方案 »

  1.   

    id那个我查时候没有加表名直接用的id啊
      

  2.   

    我的MySQL和你一样,也会报错,没有其他数据库测试,不知道只是MySQL这样还是标准SQL语法都这样。
      

  3.   

    我也试过了,是会报错,猜测:
    1、怀疑是创建了临时表,所以原来的表名无效。用explain,没有这一个,所以排除
    2、通过explain 看到table列变为表别名了,可能是将原来的表名覆盖,类似与c的赋值。
    3、开始我以为是类似c的赋值即两个指向了相同的地址,但是找不到字段这个错误让我感觉不是这么回事。
    现在问下同事
    等更
      

  4.   


    我试了其他的数据库,比如sql server,也会报错。所以我想这个应该是一个标准,当sql语句发送到服务器上后,数据库就会对sql语句进行标准化,语法检查等操作,而这个表的名称已经重新定义为 别称了