[英]How to relate subquery to outer query for update
您好,我有一個看起來像這樣的數據庫。
uniqueid description name phonenumber
66370 SALES John_Doe_Cell 555-5555
87296 SALES John_Doe_Home 555-4444
66786 ACCOUNTING Jane_Doe_Cell 555-3333
67897 ACCOUNTING Jane_Doe_Home 555-2222
我想運行一個查詢,將拉動phonenumber
用於%_Cell
和電話號碼轉到%_Home
。 因此,例如在上表中,我需要將John_Doe_Cell電話號碼放入John_Doe_Home電話號碼,對於Jane_Doe_Cell和Jane_Doe_Home也是如此。
到目前為止,我的隊列如下,但是我覺得它行不通。 我需要能夠將在查找過程中找到的名稱傳遞給%_Home
以便它使用相應的電話號碼更新正確的名稱。
UPDATE `some_table` SET phonenumber=(SELECT phonenumber WHERE `name` LIKE '%_Cell')
WHERE queue_name LIKE '%_Home'
你的模式是奇數,至少可以這樣說,並可以站進行歸一化,而是要回答你的問題問的 ,你的問題是雙重的。
子選擇返回多個更新結果,並且
子選擇結果與UPDATE集無關。
根據您的數據,讓我們嘗試子選擇:
> SELECT phonenumber WHERE `name` LIKE '%_Cell';
+-------------+
| phonenumber |
+-------------+
| 555-5555 |
| 555-3333 |
+-------------+
要進行更新,您都需要讓子選擇返回1行,並且您要將其與外部查詢的行集相關聯。 例如,這將為您提供子選擇一行,但會為您提供錯誤的數據:
> UPDATE `some_table` AS upd SET phonenumber = (
SELECT phonenumber
FROM `some_table` AS inn
WHERE
`name` LIKE '%_Cell'
LIMIT 1
)
WHERE queue_name LIKE '%_Home';
內部查詢將為每個外部行選擇哪一行? (提示:嘗試一下,看一下,也許是在事務中,以便您可以回滾結果。)要連接內部查詢和外部查詢,我猜這可能是您想要的:
> UPDATE `some_table` AS upd SET phonenumber = (
SELECT phonenumber
FROM `some_table` AS inn
WHERE
`name` LIKE '%_Cell'
AND inn.description = upd.description
)
WHERE queue_name LIKE '%_Home';
請注意,給定問題提供的數據的inn.description = upd.description
是唯一唯一連接所需行的數據。
在一般情況下(有明確的例外),在文本列和其他非索引字段上進行連接表示架構設計不良。 如果這是一個嚴肅的項目,我強烈建議您考慮將架構規范化為至少第三種規范形式。 (我將把谷歌搜索作為練習留給讀者。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.