所以,当我为salesreport
设计一个看起来像这样的表时,我犯了一个大错误
+----+------------+--------------+-------+
| id | company_id | company_code | value |
+----+------------+--------------+-------+
| 1 | 0 | 67 | 100 |
| 2 | 0 | 55 | 200 |
+----+------------+--------------+-------+
我刚刚注意到这一点,并添加名为company_id
的新列,该列位于公司表中,如下所示
+----+--------------+------+
| id | company_code | name |
+----+--------------+------+
| 1 | 55 | XX |
| 2 | 67 | XA |
+----+--------------+------+
过去我与company_code
创建关系,因为我认为它始终是唯一的但不是自动递增,代码是从现有记录中的公司列表手动创建的。
然后我意识到最好使用id
在表格之间建立关系,因此我的salesreport表格中应该company_code
而不是company_id
指向id
1}}公司表中的列
现在有超过一千条记录已经在mysql数据库中使用company_code
引用关系,我想知道是否有一次mysql查询我可以运行来修复它?
我想出了这种查询
UPDATE salesreport SET company_id = '1' WHERE company_code = '67';
但我认为既然company
和salesreport
两个表已经有了关系,为什么它不能就这样呢
UPDATE salesreport SET company_id = company.id WHERE company_code = company.company_code;
但我不认为它会起作用,需要更多查询才能知道我选择company
表然后将salesreport.company_code
与company.company_code
匹配,如果匹配则设置salesreport.company_id
与company.id
我觉得它是怎么回事......但是我不知道那个问题是什么...所以也许有人可以帮助我并为此提供一个懒惰的优雅解决方案。
顺便谢谢你。答案 0 :(得分:0)
使用联接更新到您的其他表
UPDATE salesreport s
LEFT JOIN company c on s.company_code = c.company_code
SET s.company_id = c.id;
答案 1 :(得分:0)
MERGE into salesreport S
USING(select id, company_code, name from Company) C
ON(S.company_code=C.company_code)
WHEN MATCHED THEN
UPDATE
SET S.company_id = C.id
你可以试试这个。当两个公司代码匹配时,这将使用公司表更新Salesreport表。
答案 2 :(得分:0)
您可以使用内部联接进行更新,例如:
UPDATE salesreport s
INNER JOIN company c ON s.company_code = c.company_code
set s.company_id = c.id
答案 3 :(得分:0)
以下是您的请求的解决方案:
a()
我为您创建了一个SQLFiddle来测试结果:http://rextester.com/HNJ85353
Herу是一个完整的测试用例:
UPDATE salesreport
LEFT JOIN company ON company.company_code = salesreport.company_code
SET salesreport.company_id = company.id;