不支持sql查询

不支持sql查询,sql,subquery,Sql,Subquery,表: 执行此查询时: first_col second_col 78 g1 79 g2 754 g1 34 g2 67 g1 但不支持此子查询 谢谢 正如您所看到的,红移不支持相关子查询,这其中有一些原因现在并不重要。问题是您需要重写查询。乍一看,在这种情况下,这是直截了当的 关键是将其更改为join,将其中T2.firs

表:

执行此查询时:

first_col         second_col
78                 g1
79                 g2
754                g1
34                 g2
67                 g1
但不支持此子查询


谢谢

正如您所看到的,红移不支持相关子查询,这其中有一些原因现在并不重要。问题是您需要重写查询。乍一看,在这种情况下,这是直截了当的

关键是将其更改为join,将其中T2.first\u col=T1.first\u col替换为join ON子句。下面是这次重写中未经测试的一个片段,以演示这可能看起来如何。您的确切案例可能会对此进行调整:

SELECT T1.* ,CASE WHEN EXISTS (SELECT 'X' FROM Tab1 T2 WHERE T2.first_col=T1.first_col GROUP BY 
second_col) THEN 'include' ELSE 'exclude'  END new_col FROM Tab1 T1;
通过更改为左连接,我们仍然可以测试第一列上T2和T1之间是否不匹配。希望这能让您开始。

您想知道是否有任何第二列在匹配第一列时出现少于3次。为此,您可以使用左连接,但如下所示:

SELECT T1.* ,
    CASE WHEN T3.first_col is not NULL THEN 'include' ELSE 'exclude'  END new_col 
FROM Tab1 T1
LEFT JOIN (SELECT first_col 
    FROM Tab1 T2 
    GROUP BY second_col 
    HAVING count(1)<3 ) T3
ON T3.first_col=T1.first_col
;
分组依据和子查询很棘手。请解释您想做什么。第一列在您的表格中是唯一的吗?
SELECT T1.*,
       COALESCE(tt1.new_col, 'exclude') as new_col
FROM Tab1 T1 LEFT JOIN
     (SELECT 'include' as new_col
      FROM (SELECT first_col, second_col, COUNT(*) as cnt
            FROM Tab1 tt1
           ) tt1
      HAVING MIN(cnt) < 3
     ) tt1;
select t1.*,
       (case when min(cnt) over (partition by first_col)
             then 'include' else 'exclude'
        end) as new_col
from (select t1.*,
             count(*) over (partition by first_col, second_col) as cnt
      from tab1 t1
     ) t1;