1

私は MySQL を使用しています。私の目標は、UPDATE特定の条件を満たすテーブル内のフィールドのみにすることです。ここに私が持っているものがあります:

UPDATE tbl_money AS m 
SET m.amount = m.amount + (SELECT SUM( b.bn_ppd )
                           FROM tbl_emp AS e
                           LEFT JOIN tbl_bonuses AS b 
                              ON b.bn_id = e.bn_id
                           WHERE m.u_id = e.u_id
                           HAVING COUNT(e.u_id) > 0
                           GROUP BY e.u_id LIMIT 1)

上記で、従業員が持っているボーナスの合計を現在の金額に追加したいと思います. に存在する従業員にのみtbl_emp. そのままでは、エラーメッセージが表示されます:

1064 - SQL 構文にエラーがあります。7 行目の 'GROUP BY o.user_id LIMIT 1)' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

句がないHAVING場合、システムはすべての従業員の金額を更新しますが、ボーナスを持っていない従業員は、金額を 0 にリセットします (既に金額がある場合でも)。ボーナスをお持ちの方へ、元気に働いています。

何か案は?正しい使い方はHAVING

アップデート:

tbl_bonuses
-----------
bn_id | bn_ppd
1       5
2       2
3       4
4       10

tbl_emp
-------
emp_id | u_id | bn_id | ...
1       30      2
2       30      3
3       31      1

tbl_money
---------
m_id | u_id | amount
1      30     100
2      31     56
3      32     35

更新後、望ましい結果は

    tbl_money
    ---------
    m_id | u_id | amount
    1      30     106
    2      31     57
    3      32     35

しかし、私はこの結果を得ています、

    tbl_money
    ---------
    m_id | u_id | amount
    1      30     106
    2      31     57
    3      32     0
4

2 に答える 2

2

HAVING は GROUP BY 句の後に配置する必要があります

于 2013-02-27T23:16:57.673 に答える
0

次のUPDATEステートメントを使用できます。

update tbl_money m
INNER JOIN
(
  SELECT e.u_id, SUM( b.bn_ppd ) BonusPaid
  FROM tbl_emp AS e
  LEFT JOIN tbl_bonuses AS b 
    ON b.bn_id = e.bn_id
  GROUP BY e.u_id
  HAVING COUNT(e.u_id) > 0
) e
  on m.u_id = e.u_id
set m.amount = m.amount + e.BonusPaid

SQL FiddlewithDemoを参照してください

于 2013-02-28T01:30:06.090 に答える