尝试按照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
它返回以下错误:
1)[代码:-206,SQL状态:42703]“T”在上下文中无效 在哪里使用.. SQLCODE = -206,SQLSTATE = 42703,DRIVER = 4.22.29
以防万一我不清楚上述非工作查询的含义,以下是:
SELECT
*
FROM
TABLE2
WHERE
COL2 IN
(
SELECT
COL1
FROM
TABLE1
)
如何在WITH
子句中为IN
子句使用表?
答案 0 :(得分:3)
" T"作为一个表,所以你必须选择一个列,以便与" IN"进行比较。
{{1}}
答案 1 :(得分:1)
IN
需要子查询。你只需要:
WHERE COL2 IN (SELECT ? FROM t)
请注意,您需要指定列和表格。
答案 2 :(得分:0)
我会使用exists
:
select t2.*
from table2 t2
where exists (select 1
from table1 t1
where t1.COL1 = t2.COL2 and t1.COL1 = <whatever filter>
);