我已经阅读了这个类似问题的大多数问题,但由于大多数答案的具体性质,没有一个帮助,或者我无法应用答案。
我需要将这个SELECT语句转换为UPDATE语句,SELECT语句可以正常工作。
SELECT sf_state_filings_cstm.recurrency_c, sf_state_filings_cstm.date_filed_c,
sf_state_filings_cstm.status_c
FROM sc_state_configuration_cstm
INNER JOIN sc_state_configuration_sf_state_filings_1_c ON sc_state_configuration_cstm.id_c = sc_state_configuration_sf_state_filings_1_c.sc_state_c2445uration_ida
INNER JOIN sf_state_filings_cstm ON sc_state_configuration_sf_state_filings_1_c.sc_state_configuration_sf_state_filings_1sf_state_filings_idb = sf_state_filings_cstm.id_c
WHERE sc_state_configuration_cstm.id_c = '2d9b438e-01e1-ccb2-82e5-5721221114bb'
这是我在完成以下错误后到目前为止所做的事情:
当我第一次写下更新语句时,我得到了:
MySQL代码错误1066:不唯一的表/别名:'sf_state_filings_cstm
解决方案:Why does this SQL code give error 1066 (Not unique table/alias: 'user')?
然后我收到了这个错误:
1052:字段列表中的列'recurrency_c'不明确
现在我有这个错误:
错误:'where'中的未知列'sc_state_configuration_cstm.id_c' 条款“
到目前为止,以下链接都没有帮助,或者我做错了什么
Unknown Column In Where Clause
Unknown Column in Where Clause
MySQL: "Unknown column in where clause" during Update Statement
我觉得答案与使用链接中提到的别名有关,使用HAVING而不是WHERE,但只是用HAVING替换WHERE似乎不起作用。
现在是我的语法:
UPDATE `my_database`.`sf_state_filings_cstm`
LEFT OUTER JOIN sc_state_configuration_sf_state_filings_1_c AS joined_tables ON sc_state_configuration_cstm.id_c = sc_state_configuration_sf_state_filings_1_c.sc_state_c2445uration_ida
LEFT OUTER JOIN sf_state_filings_cstm AS main_table ON sc_state_configuration_sf_state_filings_1_c.sc_state_configuration_sf_state_filings_1sf_state_filings_idb = sf_state_filings_cstm.id_c
SET main_table.recurrency_c = 'Perpetual',
main_table.expiration_date_c = ''
WHERE
sc_state_configuration_cstm.id_c = '2d9b438e-01e1-ccb2-82e5-5721221114bb'
编辑1:
以下是表格必须相互关联的方式:
我也意识到,我需要做一个LEFT OUTER JOIN而不是INNER JOIN。我已经更新了上面的语法。中间表存储来自两个表的id。这就是关系的存储方式。如果需要更多信息,请告诉我。
[溶液]
UPDATE sc_state_configuration_cstm
LEFT OUTER JOIN sc_state_configuration_sf_state_filings_1_c ON sc_state_configuration_cstm.id_c = sc_state_configuration_sf_state_filings_1_c.sc_state_c2445uration_ida
LEFT OUTER JOIN sf_state_filings_cstm ON sc_state_configuration_sf_state_filings_1_c.sc_state_configuration_sf_state_filings_1sf_state_filings_idb = sf_state_filings_cstm.id_c
SET sf_state_filings_cstm.recurrency_c = 'Perpetual',
sf_state_filings_cstm.expiration_date_c = null
WHERE
sc_state_configuration_cstm.id_c = '2d9b438e-01e1-ccb2-82e5-5721221114bb'
感谢jyncka以及我读过的很多其他帖子,我注意到在将SELECT转换为UPDATE时,他们只是写了UPDATE(来自'FROM'语句的表)。
我回去后发现我写了:
FROM sc_state_configuration_cstm
答案 0 :(得分:1)
错误告诉您发生了什么:id_c不是sc_state_configuration_cstm表中存在的列。如果您对sc_state_configuration_cstm执行DESCRIBE,它将显示正确的字段名称,您可以将其删除而不是id_c。
或者您可能在WHERE语句中使用了错误的别名。不知道你的桌子是什么样的,很难说是哪种情况。
编辑:我相信我看到了问题。以下是您在语句中明确使用的表:
sc_state_configuration_sf_state_filings_1_c
sf_state_filings_cstm
但是你在WHERE子句中使用这个表:
sc_state_configuration_cstm
您需要加入sc_state_configuration_cstm以便可以使用它。我花了一分钟才看到它,因为sc_state_configuration_cstm和sf_state_filings_cstm看起来很相似。