2017-05-11 38 views
0

我有一个内部连接的MySQL查询更新不工作,而内部连接的类似选择查询完美工作。MySQL内部连接更新查询失败,无提示

工作SELECT查询

SELECT fa.tax_rate, efa.entity_id 
FROM water_civicrmv2.civicrm_financial_account as fa 
    INNER JOIN water_civicrmv2.civicrm_entity_financial_account efa ON efa.financial_account_id = fa.id 
    INNER JOIN water_civicrmv2.civicrm_option_value cov ON cov.value = efa.account_relationship 
    INNER JOIN water_civicrmv2.civicrm_option_group cog ON cog.id = cov.option_group_id 
    WHERE efa.entity_table = 'civicrm_financial_type' 
    AND cov.name = 'Sales Tax Account is' 
    AND cog.name = 'account_relationship' 
    AND fa.is_active = 1 

失败的更新查询

UPDATE water_civicrmv2.civicrm_financial_account as fa 
    INNER JOIN water_civicrmv2.civicrm_entity_financial_account efa ON efa.financial_account_id = fa.id 
    INNER JOIN water_civicrmv2.civicrm_option_value cov ON cov.value = efa.account_relationship 
    INNER JOIN water_civicrmv2.civicrm_option_group cog ON cog.id = cov.option_group_id 
    SET fa.tax_rate = '123123' 
    WHERE efa.entity_table = 'civicrm_financial_type' 
    AND cov.name = 'Sales Tax Account is' 
    AND cog.name = 'account_relationship' 
    AND fa.is_active = 1 

我真的不知道为什么它静静地失败,因为没有语法错误,只是没有任何反应。

+1

如果选择的作品,我会吃我的短裤。 – Strawberry

+0

@Strawberry我已经更新了这个问题,请再看看 –

+0

如果解释器没有发现任何错误,那么它肯定是一个数据问题。我建议将可管理数量的数据提取到Excel中,然后迭代地运行查询并检查输出以确保连接按预期执行。我不是MySQL专家,因此您可能在UPDATE查询中出现语法错误。 – psrpsrpsr

回答

1

更改您的SQL更新,以便更新的对象仅是单表water_civicrmv2.civicrm_financial_account:

UPDATE water_civicrmv2.civicrm_financial_account as fa 
    SET fa.tax_rate = '123123' 
    WHERE fa.id = 
      (SELECT fa.id 
      FROM water_civicrmv2.civicrm_entity_financial_account efa 
      INNER JOIN water_civicrmv2.civicrm_option_value cov ON cov.value = efa.account_relationship 
      INNER JOIN water_civicrmv2.civicrm_option_group cog ON cog.id = cov.option_group_id 
      WHERE efa.financial_account_id = fa.id 
       AND efa.entity_table = 'civicrm_financial_type' 
       AND cov.name = 'Sales Tax Account is' 
       AND cog.name = 'account_relationship' 
       AND fa.is_active = 1) 
+0

感谢您的回答,但结果仍然相同,并未更新该字段。 –

+0

我看到您正在使用字符串文字'123123'更新fa.tax_rate。该字段是定义为字符串类型还是数字类型? –

+0

假设您使用的是CiviCRM数据库,我认为问题在于您为fa.tax_rate指定的值超出范围。该列被定义为十进制(10,8),它将值限制在-99.99999999至99.99999999的范围内。 –