如何连接派生表

5vf7fwbs  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(295)

我有一个复杂的查询,结果是一个包含 time 列。总是有两行具有相同的 time :

结果还包含 value 列。这个 value 有两排相同的 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 部分查询不起作用。 A 未被识别为派生表。mysql正在搜索一个表 A 在数据库中找不到它。
所以问题是:如何连接派生表?

pinkon5k

pinkon5k1#

如果没有其他方法区分行,则可以使用聚合来获取两个值:

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;
vyu0f0g1

vyu0f0g12#

不能将表(或子查询)的单个引用连接到自身;子查询必须重复。
例句:你甚至做不到 SELECT A.* FROM sometable AS A INNER JOIN A ... 这个 A 之后,内部联接无效,除非实际有一个名为a的实表。
您可以将子查询的结果插入到另一个表中,并使用该表;但它不能是真正的临时表,因为几乎在任何查询中,这些表都不能连接到它们自己或引用两次_引用两次,我的意思是joined,unioned,当它已经在from中被引用时用作“where-in”子查询。

相关问题