我有一个复杂的查询,会产生一个包含time
列的表格。总共有两行具有相同的time
:
结果还包含value
列。 <{1}}两行具有相同value
的{{1}}始终不同。
我现在想要扩展查询以将具有相同time
的行连接在一起。所以我的想法就是像这样加入派生表:
time
但是,查询的SELECT A.time, A.value AS valueA, B.value as valueB FROM
(
OLD_QUERY
) AS A INNER JOIN A AS B ON
A.time=B.time AND
A.value <> B.value;
部分不起作用。 JOIN A AS B
未被识别为派生表。 MySQL正在数据库中搜索表A
,但找不到它。
所以问题是:我如何加入派生表?
答案 0 :(得分:2)
您不能将对表(或子查询)的单个引用加入其自身;必须重复子查询。
示例:您甚至无法做到
SELECT A.* FROM sometable AS A INNER JOIN A ...
INNER JOIN之后的A
无效,除非您确实有一个名为A的真实表。
您可以将子查询的结果插入另一个表中,然后使用它;但它不能是真正的TEMPORARY表,因为它们几乎不能在任何查询中连接到自身或引用两次。 _By引用了两次,我的意思是加入,联合,用作&#34; WHERE IN&#34;子查询在FROM中已经被引用。
答案 1 :(得分:1)
如果没有其他区别行,您可以使用聚合来获取两个值:
select time, min(value), max(value)
from (<your query here>) a
group by time;
在MySQL 8+中,您可以使用cte:
with a as (
<your query here>
)
select a1.time, a1.value, a2.value
from a a1 join
a a2
on a1.time = a2.time and a1.value <> a2.value;