MySQL:如何根据从另一个表中选择的值填充现有表的新列[关闭]
Posted
技术标签:
【中文标题】MySQL:如何根据从另一个表中选择的值填充现有表的新列[关闭]【英文标题】:MySQL: How to fill new column of existing table with value based on select from another table [closed] 【发布时间】:2013-12-10 18:33:21 【问题描述】:我的 SQL 知识并不能很好地执行我想要的操作。
我有 2 张桌子:
一个是包含许多列的长数据表,其中之一是TypeName
,最近我在表TypeID
中添加了新列(它是空的atm)。喜欢:
column1 column2 column3 TypeName TypeID
------------------------------------------------
... ... ... name1 NULL
... ... ... name2 NULL
... ... ... name1 NULL
... ... ... name3 NULL
... ... ... name1 NULL
... ... ... name4 NULL
... ... ... name5 NULL
第二个表我称之为referenceTable。它为每个可能的 TypeName 映射到 TypeID。喜欢:
TypeID TypeName
-------------------
0 name1
1 name2
2 name3
etc...
我想在参考表中基于数据表的对应值填写 TypeID。 那会是什么查询?
编辑:
是的,在我用正确的值填充TypeID
列后,我想从数据表中删除TypeName
。
当然,我正在寻找一次对整个表执行此操作的查询。
【问题讨论】:
请告诉我们您的尝试。 您尝试过 UPDATE ... SELECT ... 或阅读其他帖子 ***.com/questions/1262786/… 吗? 我只尝试提出 UPDATE ... SELECT ... 查询,但我的知识确实只允许我对单行进行查询。但是如何为整张桌子做这样的事情我不知道。顺便说一句,我不确定我的 UPDATE ... SELECT ... thingy 首先是正确的。 【参考方案1】:你想更新而不是插入:
UPDATE table1 t1
INNER JOIN table2 t2 ON t1.typeName = t2.typename
SET t1.typeID = t2.typeID
但是,如果您要在两个表上都有重复的值,您真的应该考虑只有一个外键(可能是这个 typeID)并且只在参考表中使用名称。
【讨论】:
我的意图是在使用正确的值填充 TypeID 后从数据表中删除 TypeName。如果可以,我可以做你建议的查询吗? 是的,但请确保您先进行查询,然后再将其删除。 上面的那个在sql server中不起作用。所以我最终得到了类似下面的东西。以防万一有人需要。UPDATE t1 SET t1.Column = t2.SomeColumn FROM tableToUpdate t1, table2 t2 WHERE t2.Id = t1.SomeId
以上是关于MySQL:如何根据从另一个表中选择的值填充现有表的新列[关闭]的主要内容,如果未能解决你的问题,请参考以下文章