需要使用“拥有”而不是在哪里

时间:2016-07-18 21:30:30

标签: mysql sql

为简洁起见,我简化了我正在解雇的查询,如下所示

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。

为什么会这样?

2 个答案:

答案 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