[英]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.