问题使用在sql中不存在

时间:2016-01-14 10:40:38

标签: sql oracle

不存在不工作。

我有一个获取10k行的查询...现在有237行我不希望在我的最终结果中使用retirevd但是当我使用不存在时它会获取相同的no。 10k的行我在查询后使用过。

Select bu_name,
       person_num, 
       name, 
       f_config_id, 
       ass_the 
from   x_asig_table
where  not exist ( ( SELECT 1
                     FROM   (
                       SELECT XXH.x_asig_table.*,
                              COUNT(*) OVER (PARTITION BY bu_name,person_num, name) AS c
                       FROM   XXH.x_asig_table
                     ) T
                     WHERE  c > 1
                   );

3 个答案:

答案 0 :(得分:0)

子查询与主查询不相关,即在主查询中查看的行并不重要,子查询将始终为您提供相同的结果。所以要么你得到所有行,要么没有。此查询无法获取某些行而其他行也不可能。

为子查询添加标准,将其与主查询相关联以解决问题。

答案 1 :(得分:0)

您需要连接回外部查询。像这样的东西(也简化了你的查询,未经测试,但应该工作):

Select bu_name,
       person_num, 
       name, 
       f_config_id, 
       ass_the 
from   x_asig_table X
where  not exist (
                     SELECT      NULL
                     FROM        x_asig_table Y
                     GROUP BY    bu_name,person_num, name
                     WHERE       X.bu_name = Y.bu_name
                            AND  X.person_num = Y.person_num
                            AND  X.name = Y.name
                     HAVING      COUNT(1) > 1
                 )

答案 2 :(得分:0)

您似乎只是试图找到bu_nameperson_numname每个组合只有一行的行(尽管问题还不清楚您的意图是什么)。如果是这样,那么您可以在不使用EXISTS的情况下执行此操作:

SELECT bu_name,
       person_num, 
       name, 
       f_config_id, 
       ass_the
FROM   (
  SELECT bu_name,
         person_num, 
         name, 
         f_config_id, 
         ass_the,
         COUNT(1) OVER ( PARTITION BY bu_name, person_num, name ) AS cnt
  FROM   x_asig_table
)
WHERE  cnt = 1;