我可以在 IN 子句中使用 WITH 子句中的 table 吗?
Can I use a table from the WITH clause in the IN clause?
为了按照 this recommendation 编写更具可读性的 SQL 代码,我尝试使用 WITH
子句。
它在这里工作:
WITH
t AS
(
SELECT
*
FROM
TABLE1
WHERE
COL1 = 'foo'
)
SELECT
*
FROM
t
WHERE
COL2 > 42
但在以下情况下不起作用:
WITH
t AS
(
SELECT
COL1
FROM
TABLE1
)
SELECT
*
FROM
TABLE2
WHERE
COL2 IN t
它returns出现以下错误:
1) [Code: -206, SQL State: 42703] "T" is not valid in the context
where it is used.. SQLCODE=-206, SQLSTATE=42703, DRIVER=4.22.29
以防万一我不清楚上面的非工作查询的意思,这里是:
SELECT
*
FROM
TABLE2
WHERE
COL2 IN
(
SELECT
COL1
FROM
TABLE1
)
如何在 IN
子句中为 WITH
子句使用 table?
IN
需要一个子查询。您只需要:
WHERE COL2 IN (SELECT ? FROM t)
请注意,您需要指定列以及 table。
"T" 充当 table 因此您必须 select 列才能与 "IN"
进行比较
WITH
t AS
(
SELECT
COL1
FROM
TABLE1
)
SELECT
*
FROM
TABLE2
WHERE
COL2 IN ( SELECT COL FROM t )
我会使用 exists
:
select t2.*
from table2 t2
where exists (select 1
from table1 t1
where t1.COL1 = t2.COL2 and t1.COL1 = <whatever filter>
);
为了按照 this recommendation 编写更具可读性的 SQL 代码,我尝试使用 WITH
子句。
它在这里工作:
WITH
t AS
(
SELECT
*
FROM
TABLE1
WHERE
COL1 = 'foo'
)
SELECT
*
FROM
t
WHERE
COL2 > 42
但在以下情况下不起作用:
WITH
t AS
(
SELECT
COL1
FROM
TABLE1
)
SELECT
*
FROM
TABLE2
WHERE
COL2 IN t
它returns出现以下错误:
1) [Code: -206, SQL State: 42703] "T" is not valid in the context where it is used.. SQLCODE=-206, SQLSTATE=42703, DRIVER=4.22.29
以防万一我不清楚上面的非工作查询的意思,这里是:
SELECT
*
FROM
TABLE2
WHERE
COL2 IN
(
SELECT
COL1
FROM
TABLE1
)
如何在 IN
子句中为 WITH
子句使用 table?
IN
需要一个子查询。您只需要:
WHERE COL2 IN (SELECT ? FROM t)
请注意,您需要指定列以及 table。
"T" 充当 table 因此您必须 select 列才能与 "IN"
进行比较WITH
t AS
(
SELECT
COL1
FROM
TABLE1
)
SELECT
*
FROM
TABLE2
WHERE
COL2 IN ( SELECT COL FROM t )
我会使用 exists
:
select t2.*
from table2 t2
where exists (select 1
from table1 t1
where t1.COL1 = t2.COL2 and t1.COL1 = <whatever filter>
);