如何通过比较两个表中的列来填充外键

时间:2016-01-08 16:11:05

标签: mysql sql database

表A是从CSV文件导入的项目清单。电子表格包括一个用于库存物品位置的列(即牙刷,浴室)。

表B是表A中所有不同位置的列表。

我现在想要使用表B中的ID更新表A,在表A中设置为外键的新列中。我需要表A中的每条记录都有一个location_id,其中location的文本与表B中的as_entered匹配。

我试过了:

UPDATE imported_data_copy
SET imported_data_copy.location_id=locations.id
WHERE locations.as_entered LIKE imported_data_copy.location;

我得到的错误是:

#1054 - Unknown column 'locations.as_entered' in 'where clause' 

事实上,位置表中有一个as_entered列。

我做错了什么?

3 个答案:

答案 0 :(得分:1)

问题是我没有在UPDATE子句中包含locations表。正确的语法结果是:

UPDATE imported_data_copy,locations
SET imported_data_copy.location_id=locations.id 
WHERE imported_data_copy.location LIKE locations.as_entered;

很高兴我问到这里,因为我仍然遇到WHERE条款的问题。

答案 1 :(得分:0)

您的WHERE条款是向后的,应该是WHERE imported_data_copy.location LIKE locations.as_entered

答案 2 :(得分:0)

当您在SELECT子句中的特定表格上执行INSERTDELETEUPDATEWHERE操作时,左边的边是您的目标表的引用。因此,在这种情况下,imported_data_copy.location是您的目标列,应位于左侧。这与逻辑或数学运算有点不同,因此您的列很重要。

UPDATE imported_data_copy, locations
SET imported_data_copy.location_id=locations.id
WHERE imported_data_copy.location LIKE locations.as_entered;

另一个注意事项是,如果您使用文本引用带有id的表,则不是最佳实践。使用ID的整数列比文本好得多,除非你有一个很好的(非常好的)原因。