为简洁起见,我简化了我正在解雇的查询,如下所示
SELECT
1 AS mae
FROM
(SELECT
t.id
FROM transaction t) a
LEFT OUTER JOIN
(SELECT
track_id
FROM attendee) AS b ON a.id = b.track_id
HAVING mae > 0;
这里没有聚合。但是,我仍然需要使用。如果我在哪里使用,mysql无法识别列mae。
为什么会这样?
答案 0 :(得分:1)
通常,SELECT
子句中定义的别名不能在同一WHERE
中重复使用 - 也不能在ON
中使用,也不能在ORDER BY
中重复使用条款。所有SQL方言都是如此。另一方面,HAVING
允许使用别名。
MySQL识别HAVING
子句中的列别名。这非常方便,MySQL扩展了C:\Users\Other\Desktop\DoA-Tools>python "C:/Users/Other/Desktop/DoA-Tools/convert doa-tools.py" py2exe
running py2exe
1 missing Modules
------------------
? readline imported from cmd, code, pdb
Building 'dist\DoA-Tools.exe'.
error: [Errno 2] No such file or directory: 'C:\\Users\\Other\\Desktop\\Python3.5.2\\lib\\site-packages\\py2exe\\run-py3.5-win32.exe'
子句以用于非聚合查询。因此,您的查询正在使用此扩展程序。
此扩展的一个很好的功能是它允许引用而不使用子查询 - 这是正常的方法。因为MySQL实现(几乎)所有派生表,这节省了处理过程中的开销。
答案 1 :(得分:-2)
你只想尝试定期加入吗?
SELECT *
FROM transaction t
JOIN attendee AS b
ON a.id = b.track_id