mysql - 将 SELECT 语句转换为 MySQL 中的 UPDATE 语句

标签 mysql sql-update inner-join

我已经阅读了这个类似问题的大部分内容,但由于大多数答案的具体性质,没有任何帮助,或者我无法应用答案。

我需要将此 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 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

    解决方案:1052: Column 'id' 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:

    以下是表必须如何相互链接:

    MySQL Database Layout

    我还意识到,我需要执行 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/

    相关文章:

    php - 如何获取逗号分隔值对应的记录?

    MySQL timediff — 这是一个错误吗?

    android - 批量更新数据库

    sql - 是否可以使用 NH QueryOver 在一个查询中获取连接实体?

    mysql - SQL 到 MYSQL - 交叉应用前 5 条记录

    mysql - 从与插入或更新相同的表中选择

    mysql - 如何: Select from MYSQL text field type only the numbers that start with 89 using REGEXP?

    mysql - 使用 JOIN 更新基于链接表的表

    java - 更新mysql中的记录时出现语法错误异常

    mysql inner join 给出不好的结果(?)