簡體   English   中英

MySQL - 比較 2 個表並從第一個更新第二個

[英]MySQL - compare 2 tables and update the 2nd from the 1st

我有 2 個表從 CSV 文件、公司(8000 條記錄)和聯系人(11000 條記錄)導入。 聯系人的公司名稱與公司表中的名稱相匹配。 插入記錄后,我需要將 companyID 添加到聯系人表中。

a_test_company
+---------------+---------------+
| companyID     | companyName   | 
+---------------+---------------+
| 1             | companyA      | 
| 2             | companyB      | 
| 3             | companyC      | 
| 4             | companyD      |  
+---------------+---------------+

a_test_contact
+---------------+---------------+---------------+---------------+
| contactID     | contactName   | companyName   | companyID     |
+---------------+---------------+---------------+---------------+
| 1             | contactA      | companyA      |  NULL         |
| 2             | contactB      | companyA      |  NULL         |
| 3             | contactC      | companyB      |  NULL         |
| 4             | contactD      | companyC      |  NULL         |
| 5             | contactE      | companyC      |  NULL         |
+---------------+---------------+---------------+---------------+


Expected Result:
a_test_contact
+---------------+---------------+---------------+---------------+
| contactID     | contactName   | companyName   | companyID     |
+---------------+---------------+---------------+---------------+
| 1             | contactA      | companyA      | 1             |
| 2             | contactB      | companyA      | 1             |
| 3             | contactC      | companyB      | 2             |
| 4             | contactD      | companyC      | 3             |
| 5             | contactE      | companyC      | 3             |
+---------------+---------------+---------------+---------------+

我可以使用 SELECT 和 UPDATE 循環在 PHP 中執行此操作,但我也想知道如何在 PHPmyAdmin 中執行此操作。 我已經嘗試使用這篇文章中的代碼示例: SQL Select 行從第一個表和更新到第二個表通過替換我的名字,但我從 Z62A004B9594CA6BB73AZ41AFA471DC 得到一個錯誤:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM a_test_company
JOIN a_test_company
ON a_test_contact.companyName = a_test' at line 3

來自帖子的示例代碼:(他使用了國家和城市)

UPDATE ci
SET ci.CountryId = co.CountryId
FROM tblCity ci
JOIN tblCountry co
ON ci.ISO2 = co.CountryISO2
AND ci.ISO3 = co.CountryISO3
WHERE ci.CountryId IS NULL

我的第一次嘗試:(我用國家代替公司和城市代替聯系人)

UPDATE ci
SET ci.companyID = co.companyID
FROM a_test_contact ci
JOIN a_test_company co
ON ci.companyName = co.companyName
WHERE ci.companyID IS NULL

我的第二次嘗試,同樣的錯誤:(我不理解 ci 和 co,雖然我假設它是城市和國家的名稱)

UPDATE a_test_contact
SET a_test_contact.companyID = a_test_company.companyID
FROM a_test_contact
JOIN a_test_company
ON a_test_contact.companyName = a_test_company.companyName
WHERE a_test_contact.companyID IS NULL

需要使用 join 子句進行簡單更新:

update a_test_contact cont 
inner join a_test_company com on cont.companyName=com.companyName
set cont.companyID=com.companyID;

https://dbfiddle.uk/K8ouXdF6

了解更多關於MySQL 更新加入

我不明白 ci 和 co,雖然我假設它是城市和國家的名稱

它們被稱為別名,可提高查詢的可讀性。 在我的示例中,我將cont用於a_test_contact表, com用於a_test_company

暫無
暫無

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

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