Sql 不同联接查询
可能是个愚蠢的问题,但却把我难住了。比较两个表并只返回不同的列Sql 不同联接查询,sql,Sql,可能是个愚蠢的问题,但却把我难住了。比较两个表并只返回不同的列 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表中的新客户机_代码(或STG表中未列出的客户机_代码) 我认为这会起作用,但事实并非如此 然后,是否可以在案例查询中使
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表中的新客户机_代码(或STG表中未列出的客户机_代码)
我认为这会起作用,但事实并非如此
然后,是否可以在案例查询中使用此查询来验证是否存在新代码,然后将resultset设置为“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
如何使该语句成为条件语句?您需要更改查询以排除连接失败的记录
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
实际上,该查询返回所有客户机代码 试试这个
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
);
建议的查询在效率上比这个查询更好。听起来您想从DM返回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;
尝试以下任一方法:
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
或:
如果您正在使用Oracle,请将
除
更改为减
。您可以通过不同的方式执行此操作:
不在中使用
SELECT *
FROM DM_CLIENT
WHERE client_code NOT IN (
SELECT client_code
FROM STG_DM_CLIENT
)
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
使用存在的文件
SELECT *
FROM DM_CLIENT dm
WHERE NOT EXISTS (
SELECT client_code
FROM STG_DM_CLIENT
WHERE client_code=dm.client_code
)
使用左连接或右连接
SELECT *
FROM DM_CLIENT
WHERE client_code NOT IN (
SELECT client_code
FROM STG_DM_CLIENT
)
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或更新版本中,或否,查询将返回所有DM.CLIENT\u代码值,无论它们是否在STG中。@LarryLustig已修复,谢谢。我不知道我在想什么。