好的,这是查询(伪查询):
SELECT *, (t1.field + t2.field) as 'result', (t1.field * t2.field) as result2 from((select as t1 limit 1) UNION ALL (select as t2 limit 1))
我需要返回两行,然后将两个字段的数学运算到结果别名中。我知道它并不优雅,但我必须将两个问题联合起来(第一个是联盟,第二个是数学)
那么,我如何引用和使用这两个内部别名?外部选择不能访问内部别名。
我怀疑这里有一个明显的解决方案,就是我的大脑不见了。
答案 0 :(得分:1)
将两个语句组合在一起时,结果就是单个结果集。你将建立什么:
FROM
(
(SELECT f1, f2 FROM table1 LIMIT 1)
UNION
(SELECT g1, g2 FROM table2 LIMIT 1)
) derived_table_1
这将为您提供一个名为derived_table_
的结果集,其中包含两个分别名为f1
和f2
的字段。将有两行,一行来自您的第一个SELECT语句,另一行来自您的第二行。您在UNION查询中分配的表别名不再可引用。它们仅存在于自己的SELECT语句中。
如果您在Table1和Table2之间有关系,那么您需要在此处加入:
SELECT
t1.f1 + t2.g1 as result1,
t1.f2 + t2.g2 as result2,
FROM
table1 as t1
INNER JOIN table2 as t2 ON
t1.f1 = t2.g1
如果没有关系存在,那么你可能正在寻找原始的,与kludgy,在SELECT中与SUM结合:
SELECT
sum(derived_table_1.f1) as result,
sum(derived_table_1.f2) as result2
FROM
(
(SELECT f1, f2 FROM table1 LIMIT 1)
UNION
(SELECT g1, g2 FROM table2 LIMIT 1)
) derived_table_1
编辑以使用最后一个示例添加SQLFIDDLE:http://sqlfiddle.com/#!2/c8707/10
答案 1 :(得分:0)
UNION结果的列名或别名始终由第一个查询确定。将忽略在union的后续查询中定义的列名或别名。
演示:
mysql> create table foo ( a int, b int, c int );
mysql> insert into foo values (1,2,3);
mysql> create table bar (x int, y int, z int);
mysql> insert into bar values (4,5,6);
mysql> select a, b, c from (select a, b, c from foo union select x, y, z from bar) as t;
+------+------+------+
| a | b | c |
+------+------+------+
| 1 | 2 | 3 |
| 4 | 5 | 6 |
+------+------+------+
mysql> select x from (select a, b, c from foo union select x, y, z from bar) as t;
ERROR 1054 (42S22): Unknown column 'x' in 'field list'