如何加入派生表

时间:2018-06-13 17:45:21

标签: mysql sql

我有一个复杂的查询,会产生一个包含time列的表格。总共有两行具有相同的time

enter image description here

结果还包含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,但找不到它。

所以问题是:我如何加入派生表?

2 个答案:

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