Sql server 如何在SQL Server中删除两个表中只有两列比较重复的不重复行
我需要一个存储过程来创建一个基于Sql server 如何在SQL Server中删除两个表中只有两列比较重复的不重复行,sql-server,Sql Server,我需要一个存储过程来创建一个基于表a的两列的表,然后检查表B(有5列)中是否有行具有与表a中相同的这两列。不要对它们执行任何操作,删除不重复的行 大概是这样的: Create Procedure DeleteExtra as Create Table #TempTotalHoney ( HarvestDate Date, HoneyType VarChar(50) ) INSERT INTO #TempTotalHoney Select HarvestDate, HoneyType Fro
表a
的两列的表,然后检查表B
(有5列)中是否有行具有与表a
中相同的这两列。不要对它们执行任何操作,删除不重复的行
大概是这样的:
Create Procedure DeleteExtra
as
Create Table #TempTotalHoney
(
HarvestDate Date,
HoneyType VarChar(50)
)
INSERT INTO #TempTotalHoney
Select HarvestDate, HoneyType
From tHoneyHarvest
Group BY HarvestDate, HoneyType
//until here temptable created as I want, but I don't know how to check
//not duplicated rows, I tried this But it is wrong...
Delete From tHoneyWeight
Where HarvestDate AND HoneyType Not in (select HarvestDate, HoneyType
From #TempTotalHoney)
//must check these tow columns together not separately
If(OBJECT_ID('tempdb..#TempTotalHoney') Is Not Null)
Begin
Drop Table #TempTotalHoney
End
这是我得到的错误:
Msg 4145,第15级,状态1,程序DeleteExtra,第17行在预期条件的上下文中指定的非布尔型表达式,靠近“AND” 更新:
this is #TempTotalHoney that created from table_A
HarvestDate HoneyType
---------------------------------------------------
2017-01-10 Pure
2017-01-10 Semi-Pure
2017-02-03 Pure
2017-02-04 artificial
及
我希望删除RecID 8和9,即HarvestDate和HoneyType的组合不存在于#Testotalhoney中。您可以尝试使用下面的查询
DELETE table_B
FROM table_B B
LEFT JOIN #TempTotalHoney A
ON B.HarvestDate = A.HarvestDate
AND B.HoneyType = A.HoneyType
WHERE A.HoneyType is Null;
希望这能对您有所帮助。请提供一些示例数据和该示例数据的预期结果。@Viki888您能再解释一下吗,或者如果可能的话,将其作为答案发布?请在
表a
中提供一些示例数据,表B
并提供您希望从该示例中获得的结果data@Viki888我更新了问题,因此您是否要从表B
中删除RecID 18和19
?我收到以下错误:无法解决“阿拉伯语”和“阿拉伯语”之间的排序冲突在“等于”操作中。您似乎有排序问题。修改和
条件,如和B.HoneyType=A.HoneyType将阿拉伯语校对为
yeees,非常感谢,最后问题解决了,我问了一个问题,因为它仍然没有回答,我不得不用其他解决方案解决它,这导致我这个问题,你刚刚解决了它。你有没有时间看一看,看看有没有更好的方法?这是你正在谈论的问题吗?好的,完成后告诉我。
DELETE table_B
FROM table_B B
LEFT JOIN #TempTotalHoney A
ON B.HarvestDate = A.HarvestDate
AND B.HoneyType = A.HoneyType
WHERE A.HoneyType is Null;