表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
列。
我做错了什么?
答案 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
子句中的特定表格上执行INSERT
,DELETE
,UPDATE
,WHERE
操作时,左边的边是您的目标表的引用。因此,在这种情况下,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的整数列比文本好得多,除非你有一个很好的(非常好的)原因。