考虑表table1
及其对应的查找表table2
:
`table1`
a b
1 11
2 22
3 33
4 44
5 55
`table2`
b c
11 111
22 222
33 333
44 444
55 555
您可以使用以下查询在table1
和table2
之间执行查找:
SELECT `table1`.`a`, `table1`.`b`, `table2`.`c`
FROM `table1`
LEFT JOIN `table2`
ON `table1`.`b` = `table2`.`b`
哪会正确提示结果:
a b c
1 11 111
2 22 222
3 33 333
4 44 444
5 55 555
问题
现在,假设由于某种原因,您需要列b的别名(例如:某些函数计算)。本能地,您可能会尝试执行以下查询:
SELECT `table1`.`a`, ABS(`table1`.`b`) as tb, `table2`.`c`
FROM `table1`
LEFT JOIN `table2`
ON tb = `table2`.`b`
然而,MySQL会说:
#1054 - Unknown column 'tb' in 'on clause'
问题
上面的查询有什么问题?如何纠正?
如何在LEFT JOIN
查询中使用别名?
答案 0 :(得分:2)
在同一级别的查询中,您不能在ON
子句中使用列别名,但是您可以在ON
子句中使用别名的完整表达式
SELECT `table1`.`a`, ABS(`table1`.`b`) as tb, `table2`.`c`
FROM `table1`
LEFT JOIN `table2`
ON ABS(`table1`.`b`) = `table2`.`b`
编辑以在ON
子句中使用别名,您可以在外部查询中使用它们,如
SELECT a.`a`, a.tb, b.`c`
FROM(
SELECT `a`, ABS(`b`) as tb FROM `table1`
) a
LEFT JOIN `table2` as b
ON a.tb = b.`b`