2016-01-14 70 views
0

不存在不起作用。使用sql中不存在的問題

我有一個提取10k行的查詢......現在有237行,我不想在最終結果中是retirevd,但是當我使用不存在時,它是獲取相同的否。我已經使用了以下查詢的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

:如果是這樣,那麼你就可以做到這一點,而無需使用EXISTS這樣嗎? –

+0

經過一些快速代碼格式化 - 似乎有一個無與倫比的開頭括號;這是問題嗎?否則,你可以發佈你正在發生的錯誤。 – MT0

+0

'x_asig_table'和'XXH.x_asig_table'是同一張表還是兩個不同的模式? – MT0

回答

0

子查詢不與主查詢相關的,也就是說,它不會不管你是什麼排在主查詢,子查詢將永遠給你同樣的結果。因此,無論是獲得所有行還是沒有。這個查詢不可能得到一些行而其他的不可行。

將條件添加到與子查詢相關聯的主查詢來解決問題。

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 
       ) 
0

你似乎是試圖找到只有那些行,其中有每bu_nameperson_numname組合單行(雖然問題是不清楚你的意圖是什麼)。你爲什麼要使用「選擇1」,什麼樣的價值,你想在你比較一下,「不存在」的聲明

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;