2011-09-27 34 views
0

可能愚蠢的問題,但讓我難住。比較2個表並只返回不同的列。不同的加入查詢

 SELECT DISTINCT(DM.CLIENT_CODE) FROM DBO.DM_CLIENT DM 
     LEFT JOIN DBO.STG_DM_CLIENT STG 
     ON STG.CLIENT_CODE = DM.CLIENT_CODE 

查詢的目的是僅從DM表(或client_codes未在STG表中列出)返回新的client_codes。

我想這會工作,但不是。

可以此查詢的情況下查詢中,然後用來驗證新的代碼時存在,然後將結果集爲「A」

 select case 
      when (SELECT DBO.DM_CLIENT.Client_Code 
      FROM DBO.DM_CLIENT DM 
      LEFT JOIN DBO.STG_DM_CLIENT STG  
      ON STG.Client_Code= DM.Client_Code 
      WHERE STG.Client_Code IS NULL 
      GROUP BY DM.Client_Code) then 'A' 
     end 

     from DBO.DM_CLIENT.Client_Code, DBO.STG_DM_CLIENT.Client_Code 

我怎麼能作出這樣的聲明是一個條件語句?

回答

1

聽起來像你想要返回那些在STG中不存在的DM。

SELECT DM.Client_Code 
FROM DBO.DM_CLIENT As DM 
LEFT JOIN DBO.STG_DM_CLIENT As STG 
    ON STG.Client_Code= DM.Client_Code 
WHERE STG.Client_Code IS NULL 
GROUP BY DM.Client_Code; 
+0

這是正確的 – Nobody

0

您需要更改查詢以排除連接失敗的記錄。

SELECT 
    DISTINCT(DM.CLIENT_CODE) 
FROM 
    DBO.DM_CLIENT AS DM 
    LEFT OUTER JOIN DBO.STG_DM_CLIENT AS STG ON 
     STG.CLIENT_CODE = DM.CLIENT_CODE 
WHERE 
    STG.CLIENT_CODE IS NULL 
0

該查詢實際上是返回所有client_codes。

試試這個。

SELECT DISTINCT(DM.CLIENT_CODE) FROM DBO.DM_CLIENT DM 
    WHERE NOT EXISTS (
     SELECT * FROM DBO.STG_DM_CLIENT STG 
     WHERE STG.CLIENT_CODE = DM.CLIENT_CODE 
    ); 

提出的查詢mikerobi效率比這個好。

+0

號,查詢返回所有DM.CLIENT_CODE值是否*或*不是他們在STG。 –

+0

@LarryLustig修正,謝謝。我不知道我在想什麼。 –

0

嘗試之一:

select distinct dm.client_code 
from dbo.dm_client dm 
left join dbo.stg_dm_client stg on stg.client_code = dm.client_code 
where stg.client_code is null 

或者:

select distinct dm.client_code 
from dbo.dm_client dm 
where not exists (select null from stg.client_code stg where dm.client_code = stg.client_code) 
0
SELECT CLIENT_CODE 
    FROM DBO.DM_CLIENT 
EXCEPT 
SELECT CLIENT_CODE 
    FROM DBO.STG_DM_CLIENT; 

變化EXCEPTMINUS,如果你使用的是Oracle。

0

爲此,您可以用不同的方式:

使用NOT IN

SELECT * 
FROM DM_CLIENT 
WHERE client_code NOT IN (
    SELECT client_code 
    FROM STG_DM_CLIENT 
) 

使用EXISTS

SELECT * 
FROM DM_CLIENT dm 
WHERE NOT EXISTS (
    SELECT client_code 
    FROM STG_DM_CLIENT 
    WHERE client_code=dm.client_code 
) 

使用左方或者右方JOIN

SELECT dm.* 
FROM DM_CLIENT DM 
LEFT JOIN STG_DM_CLIENT STG 
    ON STG.CLIENT_CODE = DM.CLIENT_CODE 
WHERE stg.client_code is null 

在SQL Server 2005或更新版本,您可以使用OUTER APPLYEXCEPT