在sql中,当第一行第二列与第二行第一列相同时,如何删除行
如果第一行的“代码”列等于第二行的“编号”列,而第二行的“代码”列等于第一行的“编号”列,则如何删除行 sql不能使用循环 将此用作示例代码在sql中,当第一行第二列与第二行第一列相同时,如何删除行,sql,Sql,如果第一行的“代码”列等于第二行的“编号”列,而第二行的“代码”列等于第一行的“编号”列,则如何删除行 sql不能使用循环 将此用作示例代码 CREATE TABLE #temp(id int, code int, Number int) Insert into #temp values(1,2,1) Insert into #temp values(2,1,2) Insert into #temp values(3,2,3) Insert into #temp values(4,2,3) I
CREATE TABLE #temp(id int, code int, Number int)
Insert into #temp values(1,2,1)
Insert into #temp values(2,1,2)
Insert into #temp values(3,2,3)
Insert into #temp values(4,2,3)
Insert into #temp values(5,2,3)
select * from #temp
只需使用联接,即可使用指定的条件获取要删除的行:
delete t1
from #temp t1
inner join #temp t2
on t1.code = t2.Number and t2.code = t1.Number
只需使用联接,即可使用指定的条件获取要删除的行:
delete t1
from #temp t1
inner join #temp t2
on t1.code = t2.Number and t2.code = t1.Number
删除t1
从温度t1
哪里有
从温度t2中选择*
其中t1.code=t2.Number和t2.code=t1.Number和t2.Id>t1.Id
删除t1
从温度t1
哪里有
从温度t2中选择*
其中t1.code=t2.Number和t2.code=t1.Number和t2.Id>t1.Id
因为您没有指定正在使用的RDBMS。假设它是SQL Server,则可以执行以下操作:
;WITH CTE
AS
(
select * , ROW_NUMBER() OVER(ORDER BY ID) rownum
from temp
), RowsToDelete
AS(
SELECT c1.*
FROM CTE c1
INNER JOIN CTE c2 ON c1.rownum - c2.rownum = 1 AND c1.number = c2.code
)
DELETE r
FROM temp r
WHERE ID IN ( SELECT ID
FROM RowsToDelete);
对于示例数据,这将只删除一行,即:
ID CODE NUMBER
2 1 2
因为您没有指定正在使用的RDBMS。假设它是SQL Server,则可以执行以下操作:
;WITH CTE
AS
(
select * , ROW_NUMBER() OVER(ORDER BY ID) rownum
from temp
), RowsToDelete
AS(
SELECT c1.*
FROM CTE c1
INNER JOIN CTE c2 ON c1.rownum - c2.rownum = 1 AND c1.number = c2.code
)
DELETE r
FROM temp r
WHERE ID IN ( SELECT ID
FROM RowsToDelete);
对于示例数据,这将只删除一行,即:
ID CODE NUMBER
2 1 2
应用解决方案后,temp中的结果应该是什么样子?应该删除第一行还是第二行?或者两者都应该删除?应该删除第二行,并且我正在使用sql server 2008应用解决方案后,temp中的结果应该是什么样子?应该删除第一行还是第二行?或者应该同时删除这两行?第二行应该删除,我正在使用sql server 2008此命令删除两行内容相似的内容。但是我只需要删除一行…这个命令删除两行。但我只需要删除一行…谢谢。这对我来说真的很有用+20。但是我不能投你的票。。bcz我的名声是o。。所以,通过这个来提高我的声誉questioon@user1001101-不客气。如果你觉得有帮助,或者这里给出的任何其他有帮助的答案,请勾选答案左边的标记。这就是在SO中的工作原理。谢谢。谢谢。这对我来说真的很有用+20。但是我不能投你的票。。bcz我的名声是o。。所以,通过这个来提高我的声誉questioon@user1001101-不客气。如果你觉得有帮助,或者这里给出的任何其他有帮助的答案,请勾选答案左边的标记。这就是在SO中的工作原理。谢谢。这也是我想要的工作方式,但需要比这段代码更多的时间;将CTE设置为select*,按ID rownum从temp排序的行号,将RowsToDelete设置为select c1.*从CTE c1内部将CTE c2连接到c1.rownum-c2.rownum=1和c1.NUMBER=c2.code从temp r中删除r,其中ID在select ID from RowsToDelete中;这也是我想要的,但需要更多的时间比这个代码;将CTE设置为select*,按ID rownum从temp排序的行号,将RowsToDelete设置为select c1.*从CTE c1内部将CTE c2连接到c1.rownum-c2.rownum=1和c1.NUMBER=c2.code从temp r中删除r,其中ID在select ID from RowsToDelete中;