我正在嘗試修復 SQL Server 資料庫中的資料錯誤。
有些值使用了錯誤工廠的錯誤 partId。
我可以獲得所有帶有錯誤零件的機器的串列,如下所示:
---machines using wrong parts from wrong factory 88 and 89:
SELECT ml.machineId, ml.machineName, mp.machineId, mp.partId, pc.officialIdentifierId
FROM industry.machineParts mp
INNER JOIN partsCatalog pc ON mp.partId = pc.partId
INNER JOIN machineList ml ON mp.machineId = ml.machineId
WHERE pc.factoryId IN (88,89)
我有一個 ID,它們在 machineParts 表中很常見,那就是officialIdentifierIdID。
但我不確定如何使用工廠 88 和 89 的 partId 使用新工廠 100 partId 更改 machineParts 表中的所有行。
machineParts 表如下所示:
machineId partId
----------------------
7623741 123
8927661 124
6471982 125
因此,如果一臺機器有一個來自工廠 88 或 89 的舊零件 ID,我需要用工廠 100 的零件 ID 替換它。
partsCatalog 表具有 factoryId 值,如下所示:
partId | name | factoryId | officialIdentifierId
--------------------------------------------------------------
123 OilFil 88 A-00-900c
124 O_Filter 89 A-00-900c
125 Oil Filter 100 A-00-900c
因此,修復后正確的 machineParts 表應如下所示:
machineId partId
----------------------
7623741 125
8927661 125
6471982 125
我嘗試使用此更新陳述句來修復所有錯誤行:
UPDATE machineParts SET partID = (SELECT partID FROM partsCatalog WHERE factoryId = 100)
WHERE partID IN(123, 124)
但我收到此錯誤:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. The statement has been terminated.
Is there a way to fix all the bad rows with one query?
Thanks!
uj5u.com熱心網友回復:
這里的問題是您有多個帶有factoryId = 100. 您可以使用 TOP 1 來“修復”此問題,如下所示,但您必須確保partID子查詢的所有記錄都相同factoryId:
UPDATE machineParts SET partID = (SELECT TOP(1) partID FROM partsCatalog WHERE factoryId = 100)
WHERE partID IN(123, 124);
這表示“只需在factoryId 為 100的第一條記錄中給我partID”。您還可以調整子查詢以提供最新的查詢,假設有一個createdOn欄位作為示例:
UPDATE machineParts SET partID = (SELECT TOP(1) partID FROM partsCatalog WHERE factoryId = 100 ORDER BY createdOn DESC)
WHERE partID IN(123, 124);
uj5u.com熱心網友回復:
工廠 100 中是否只有一個零件的 OfficialIdentifierId 為 A-00-900c?
如果是這樣的話,
UPDATE machineParts
SET partID = (SELECT partID
FROM partsCatalog
WHERE factoryId = 100
AND officialIdentifierId = 'A-00-900c'
)
WHERE partID IN (123, 124)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/325201.html
標籤:sql sql-server tsql sql-server-2012
下一篇:SqlAzure-跨資料庫查詢
