将SELECT语句转换为MySQL

时间:2016-05-03 14:59:31

标签: 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代码错误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

      2. 我觉得答案与使用链接中提到的别名有关,使用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 
        

1 个答案:

答案 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看起来很相似。