如何重写SQL查询,以使原始子查询成为新的CTE子查询(SQL WITH子句?)>

问题描述 投票:1回答:1

我有两个简单的表,它们分别是:t和p。这里是用于创建和插入其值的代码,以便您可以重构它们。t:

CREATE TABLE t (
  x int NOT NULL,
  y int NOT NULL
);
INSERT INTO t VALUES
  (2,1),(5,3),(6,4),(7,6),(9,9);

p:

CREATE TABLE p (
  val int NOT NULL
);
INSERT INTO p VALUES
  (4),(5),(7),(8),(9);

原始查询是:

SELECT t.x AS x
FROM   t AS t
WHERE  t.x IN
  (SELECT p.val
   FROM   p
   WHERE  p.val > t.y);

输出:

x
--
5
7

现在,我尝试将该查询的子查询重写为WITH子查询。

我尝试过:

WITH
pvals AS (SELECT p.val
   FROM   p,t
   WHERE  p.val > t.y),
xs as (select t.x from t,p where p.val>t.y) --sth wrong
 SELECT t.x AS x FROM t WHERE t.x in(select * from pvals);

但是这给出了输出

x
--
5
7
9

你能提供一个线索吗?

我有两个简单的表,分别为:t和p。这里是用于创建和插入其值的代码,以便您可以重构它们。 t:创建表t(x int NOT NULL,y int NOT NULL);插入到...

sql subquery common-table-expression
1个回答
0
投票

根据我对问题的理解,您有两个条件可以加入/联系表tp,即

© www.soinside.com 2019 - 2024. All rights reserved.