不存在不工作。
我有一个获取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
);
答案 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_name
,person_num
和name
每个组合只有一行的行(尽管问题还不清楚您的意图是什么)。如果是这样,那么您可以在不使用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;