2017-05-11 3 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クエリ

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

をそのSELECT作品ならば、私は私のパンツを食べますよ。 – Strawberry

+0

@Strawberry質問を更新しました。もう一度見てください –

+0

インタプリタがエラーをスローしない場合は、データの問題でなければなりません。管理可能な量のデータをExcelに引き込み、繰り返しクエリを実行し、出力をチェックして結合が期待どおりに実行されていることを確認することをお勧めします。私はMySQLの専門家ではないので、UPDATEクエリに構文エラーがある可能性があります。 – psrpsrpsr

答えて

1
UPDATEのオブジェクトは、単一のテーブルwater_civicrmv2.civicrm_financial_accountあるように、あなたの更新SQLを変更し

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の範囲に制限します。 –

関連する問題