【问题标题】:Convert SELECT statement to an UPDATE statement in MySQL将 SELECT 语句转换为 MySQL 中的 UPDATE 语句
【发布时间】: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'

这是我在解决以下错误后所得到的:


  1. 当我第一次写更新语句时,我得到:

    MySQL 代码错误 1066:非唯一表/别名:'sf_state_filings_cstm

    解决方案:Why does this SQL code give error 1066 (Not unique table/alias: 'user')?


  1. 然后我得到了这个错误:

    1052: 字段列表中的列‘recurrency_c’不明确

    解决方案:1052: Column 'id' in field list is ambiguous


  1. 现在我有这个错误:

    错误:“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


    【解决方案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 乍一看很相似。

    【讨论】:

    • 那一定是别名问题,因为我现在正在查看 db 并且可以在其中看到 id_c。我将更新我的答案以包含有关表如何链接的更多信息。
    猜你喜欢
    • 2018-09-17
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2020-06-29
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多