可能是愚蠢的问题,但让我难过。比较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
如何将该陈述作为条件陈述?
答案 0 :(得分:1)
听起来你想要从ST中返回那些在STG中不存在的那些。
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;
答案 1 :(得分: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
答案 2 :(得分: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在效率上要优于此。
答案 3 :(得分: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)
答案 4 :(得分:0)
SELECT CLIENT_CODE
FROM DBO.DM_CLIENT
EXCEPT
SELECT CLIENT_CODE
FROM DBO.STG_DM_CLIENT;
如果您使用的是Oracle,请将EXCEPT
更改为MINUS
。
答案 5 :(得分: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
)
使用LEFT或RIGHT 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 APPLY或EXCEPT