我已经阅读了这个类似问题的大部分内容,但由于大多数答案的具体性质,没有任何帮助,或者我无法应用答案。
我需要将此 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 code error 1066: Not unique table/alias: ‘sf_state_filings_cstm
解决方案:Why does this SQL code give error 1066 (Not unique table/alias: 'user')?
然后我得到了这个错误:
1052: Column ‘recurrency_c' in field list is ambiguous
现在我遇到了这个错误:
Error : Unknown column 'sc_state_configuration_cstm.id_c' in 'where clause'
到目前为止,以下链接都没有帮助,或者我做错了什么
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
最佳答案
该错误告诉您发生了什么: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 乍一看很相似。
关于mysql - 将 SELECT 语句转换为 MySQL 中的 UPDATE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37007631/