簡體   English   中英

MySQL - 當其他表中有多個實例時,如何使用另一個表中的數據正確更新行

[英]MySQL - How to correctly update rows with data from another table, when multiple instances in other table

該問題已關閉,因為有人建議它與從另一個表列值更新列相同,但這是一個完全不同的問題。 另一個問題是語法錯誤問題,而且問題寫得不好。

我有兩個表,alltagsunique 和 cables。

alltagsunique:

標簽號 地點
892EL13.404-J02 0831
891EA02.419-E03 A0914

電纜:

來自標簽號 從位置 標簽號 ToLoc
892EL13.404-J02 0834 892EL13.404-S10 0831
892EL13.404-J02 0834 892EL13.404-E14 0831
891EA02.419-E03 A0916 891EA02.419-E10 A0916

顯然還有更多條目,大約有 13,000 個。

請注意,在電纜表中,FromTagNo 或 ToTagNo 可能會重復(這是設備之間的連接表)。

電纜表中的位置詳細信息是正確的,我需要更新 alltagsunique 表位置,很簡單吧? 唉,不,不是。

SELECT DISTINCT atu.TagNo,atu.Location,cables.FromTagNo,cables.FromLoc
FROM alltagsunique atu
INNER JOIN cables ON atu.TagNo = cables.FromTagNo
WHERE atu.Location <> cables.FromLoc;

以上將顯示 alltagsunique 中的所有條目,其中位置與 tagno 匹配時不匹配。

UPDATE alltagsunique atu
LEFT JOIN cables cab ON atu.TagNo = cab.FromTagNo
SET atu.Location = cab.FromLoc;

上面應該更新 alltagsunique 中所有匹配 tagno 的位置。 然后計划運行它以尋找與 ToTag/ToLoc 的匹配項。

UPDATE alltagsunique atu
INNER JOIN cables cab ON atu.TagNo = cab.FromTagNo
SET atu.Location = cab.FromLoc;

但是這些都沒有更新每個條目,我猜這是因為電纜中可能存在重復? 再次運行第一個查詢仍然顯示不匹配的條目。

有人對這怎么可能有建議嗎? 我正在考慮創建一個新表並將所有唯一條目移到那里然后嘗試更新,但肯定 SQL 不是那么垃圾以至於有一個更簡單的解決方案。

我搜索了堆棧溢出以尋找類似的問題,但我找不到任何問題。

編輯:嘗試了以下相同的結果:

UPDATE alltagstest att
JOIN (
SELECT FromTagNo,FromLoc
FROM cables
GROUP BY FromTagNo
) cab
ON att.TagNo = cab.FromTagNo
SET att.Location = cab.FromLoc;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM