【发布时间】:2016-05-03 14:59:30
【问题描述】:
我已经阅读了这个类似问题的大部分内容,但由于大多数答案的具体性质,没有任何帮助,或者我无法应用答案。
我需要把这个 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
【问题讨论】:
标签: mysql sql-update inner-join