電子書籍の厳選無料作品が豊富!

以下に記述する条件でUPDATEしたいのですが、
どのようなSQLを使えばよいか教えて頂けないでしょうか、
いろいろ試してみたのですがうまくいきません。
よろしくお願い致します。

*UPDATE前
「バイト給与テーブル」
ユーザー,作業日,ステータス,日給,締め日,支払日
Aさん,06/03,支払済,3000,06/30,07/10
Aさん,06/15,支払済,7000,06/30,07/10
Aさん,07/05,未払い,1000,NULL,NULL
Aさん,07/08,未払い,3000,NULL,NULL
Aさん,07/30,未払い,4000,NULL,NULL

Bさん,06/20,未払い,2000,NULL,NULL
Bさん,06/28,未払い,3000,NULL,NULL
Bさん,07/05,未払い,2000,NULL,NULL
Bさん,07/11,未払い,5000,NULL,NULL
Bさん,07/20,未払い,3000,NULL,NULL

UPDATE条件:
7月給与の締めを行う時(6月未払い分と7月分)
「ステータス」が'未払い'で「日給」の合計が一万円以上の場合だけ
「ステータス」を'締め'とし「締め日」に'07/31'と[UPDATE]したいのです。

イメージとしては、以下のような感じです。

SELECT ユーザー AS '支払発生ユーザー' FROM バイト給与テーブル
WHERE ステータス = '未払い'
GROUP BY ユーザー
HAVING SUM(日給) >= 10000

UPDATE バイト給与テーブル
SET
ステータス = '締め',
締め日 = '07/31'
WHERE ユーザー = '支払発生ユーザー'
AND ステータス = '未払い'

現在使用しているMYSQLのバージョンでは、サブクエリーは使えないようです。
ご教授お願い致します。

A 回答 (1件)

ユーザー、作業日でユニーク属性をつけておけばREPLACEで処理できます。


テンポラリをうまくつかうとよいでしょう。

ALTER TABLE `バイト給与テーブル`
ADD UNIQUE (`ユーザー` ,`作業日`);
(これは1回やっておけばよい)

CREATE TEMPORARY TABLE `TEMP_支払い`
SELECT ユーザー AS `支払発生ユーザー`
FROM `バイト給与テーブル`
WHERE `ステータス` = '未払い'
GROUP BY `ユーザー`
HAVING SUM(`日給`) >= 10000;

CREATE TEMPORARY TABLE `TEMP_変換`
SELECT `ユーザー`,`作業日`,'支払済' AS `ステータス`,`日給`,'2006-07-31' AS `締め日`,NULL AS `支払日`
FROM `バイト給与テーブル`
INNER JOIN `TEMP_支払い` ON `支払発生ユーザー`=`ユーザー`;

REPLACE `バイト給与テーブル`
SELECT * FROM `TEMP_変換`;

この回答への補足

書き込みが遅くなりすみません。

教えて頂いた方法で試した結果うまく処理出来ました。
TEMPORARY TABLE 、REPLACEともに今まで使った事がなかったので、
今回教えて頂いた事は、とても勉強になりました。
特にTEMPORARY TABLEの応用範囲はひろそうですね。

ありがとうございました。

補足日時:2006/11/24 16:32
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
教えて頂いた方法で試して見たいと思います。

お礼日時:2006/11/22 09:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す