这是事情:我有2个数据库ADatabaseCX和ADatabaseRH。数据库是一样的。我在两个数据表中都有一些记录。我想要做的是从ADatabaseCX向ADatabaseRH插入条目,但只有ADatabaseRH中不存在的条目 - 在RH中存在不完整的数据。
我尝试使用嵌套SQL,如下所示:
SELECT a.*
FROM ADatabaseCX.dbo.Recipes AS a
LEFT JOIN ADatabaseRH.dbo.Recipes AS b ON (ADatabaseCX.dbo.Recipes.recipeId = ADatabaseRH.dbo.Recipes.recipeId)
WHERE b.recipeId IS NULL
但它说
Msg 4104, Level 16, State 1, Line 3
The multi-part identifier "ADatabaseCX.dbo.Recipes.recipeId" could not be bound.
Msg 4104, Level 16, State 1, Line 3
The multi-part identifier "ADatabaseRH.dbo.Recipes.recipeId" could not be bound.
拳头(第一个想法)我试过
SELECT * FROM ADatabaseCX.dbo.Recipes
WHERE NOT EXISTS (SELECT recipeId FROM ADatabaseRH.dbo.Recipes)
但这不会给我留下任何记录。
复制时,我也希望以一种ID保持不变的方式进行复制。
我正在使用MS SQL Server 2008。 任何帮助将不胜感激。
答案 0 :(得分:1)
尝试使用此引用a.recipeId
和b.recipeId
:
SELECT a.*
FROM ADatabaseCX.dbo.Recipes AS a
LEFT JOIN ADatabaseRH.dbo.Recipes AS b ON a.recipeId = b.recipeId
WHERE b.recipeId IS NULL
或者这也可以使用NOT IN
:
SELECT *
FROM ADatabaseCX.dbo.Recipes
WHERE recipeId NOT IN (
SELECT recipeId
FROM ADatabaseRH.dbo.Recipes
)
答案 1 :(得分:1)
问题是你是在数据库名称上初始化ALIAS
但是你没有在ON
子句中使用它,它应该是
SELECT a.*
FROM ADatabaseCX.dbo.Recipes AS a
LEFT JOIN ADatabaseRH.dbo.Recipes AS b
ON a.recipeId = b.recipeId
WHERE b.recipeId IS NULL
数据库名称和表名在每个ALIAS
初始化后都不再有效,这就是您收到该错误消息的原因。
答案 2 :(得分:1)
您的查询存在的问题是您已对表进行别名,但之后未在联接中使用这些别名。
试试这个:
SELECT a.*
FROM ADatabaseCX.dbo.Recipes AS a
LEFT JOIN ADatabaseRH.dbo.Recipes AS b ON (a.recipeId = b.recipeId)
WHERE b.recipeId IS NULL
编辑:看起来很晚几分钟就看出来了!