我尝试执行以下查询:
SELECT * FROM `pd_cheque` as p WHERE `pd_cheque`.etype='pd_issue'
它给了我以下错误:
#1054 - 'where子句'
中的未知列'pd_cheque.etype'
在“一些”实验之后,我得到了以下查询:
SELECT * FROM `pd_cheque` as p WHERE p.etype='pd_issue'
为什么MySQL不允许我执行第一个查询? 表名一旦分配了别名,就不能再使用表名进行引用吗?
答案 0 :(得分:3)
在第一个查询中:
SELECT *
FROM `pd_cheque` as p
WHERE `pd_cheque`.etype='pd_issue'
您已使用表别名重命名该表。在查询的其他任何位置,您需要使用p
来引用该表。查询不再识别原始表名,因为它已重命名。
自联接需要表别名。考虑:
select
from t join
t
on t.id = t.otherid
没有别名就没有意义:
select
from t join
t tother
on tother.id = t.otherid;
此外,表别名使查询更容易阅读。
答案 1 :(得分:0)
因为当您为表定义别名时,就像您一样
`pd_cheque` as p
然后你必须使用它而不是原始的表名。