我找到了針對 SQL Server 但不是 MS Access 的問題的答案。
表 NE:
IP | Status | Peer
-----------------------------
10.10.10.1 | 0 | null
10.20.1.5 | 0 | null
表對等:
IP | Peer | Status
------------------------------------------
10.10.10.1 | 10.100.2.3 | 0
10.10.10.1 | 10.200.1.1 | 1
10.10.10.1 | 10.50.100.7 | 10
10.20.1.5 | 10.20.20.7 | 10
10.20.1.5 | 10.2.2.10 | 5
期望的結果:
IP | Status | Peer
-----------------------------
10.10.10.1 | 10 | 10.50.100.7
10.20.1.5 | 10 | 10.20.20.7
有時此查詢有效,有時失敗:
Update NE
Inner join (Select * from Peer Order by Status Desc) Q
On Q.IP = NE.IP
Set NE.Status = Q.Status, NE.Peer = Q.Peer
Where NE.Status = 0
該查詢會彈出一個通知(例如),將影響 3 行IP 10.10.10.1。哪一個會被保留?
當我改變Order by Status Desc結果Order by Status Asc并沒有改變。
uj5u.com熱心網友回復:
需要對等表中的唯一識別符號欄位 - 將提供自動編號。
看不到生成所需輸出甚至需要 NE 表。
SELECT * FROM Peer WHERE ID IN (
SELECT TOP 1 ID FROM Peer AS Dup WHERE Dup.IP = Peer.IP ORDER BY Dup.Status DESC, Dup.ID DESC);
但是如果你必須更新 NE:
UPDATE NE
INNER JOIN(
SELECT * FROM Peer WHERE ID IN (
SELECT TOP 1 ID FROM Peer AS Dup WHERE Dup.IP = Peer.IP ORDER BY Dup.Status DESC, Dup.ID DESC)) AS Q1
ON NE.IP = Q1.IP SET NE.Status = [q1].[Status], NE.Peer = [q1].[Peer];
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/515195.html
