CREATE TABLE IF NOT EXISTS `TEST1` (
`ID` varchar(15) NOT NULL DEFAULT '',
`DATE_PARAM` date NOT NULL DEFAULT '0000-00-00',
`PRICE` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`DATE_PARAM`)
) ENGINE=MyISAM DEFAULT CHARSET=ujis;ID
PRIMARYの場合にPRICEの値が、
格納されている値より
安い場合だけ更新したいです。
それ以外の場合は、INSERTしたいです。
以下のSQLに条件文など足せるのでしょうか?
INSERT INTO TEST1
(ID,DATE_PARAM,PRICE)
VALUES (1,'2009-01-19',100) ON DUPLICATE KEY UPDATE PRICE=100
わかる方いましたら、よろしくお願いします。
DBの種類やバージョンの記載がないと回答得られなくないでしょうか?
あと気になったのですが
PRICEの値が格納されている値より安い場合だけ更新・・となっていますが
SQL文の例で PRICE=100 って書かれると 安い場合 じゃないのでは?
問題点があります。
高い場合は、INSERTしたいとありますが、その場合、既にプライマリーキーは存在することになります。
(安いほうで)
そこに 高い金額のものを INSERTすると ユニークで エラーになりませんでしょうか?
IDを更新して INSERTするのでしょうか?
あ、間違えてますね。
質問が。。。
すいません。
基本的に、PRIMARYで安い値段を更新したいだけです。
要件が分かりにくいですが、
(id,date_param)の主キー値で、
という感じでいいでしょうかね?
1.最小値でないので、更新は発生しない例
insert into test1(id,date_param,price) values('1','2009-01-19',100) on duplicate key update price=least(price,values(price))
2.最小値なので、更新が発生する例
insert into test1(id,date_param,price) values('1','2009-01-19',40) on duplicate key update price=least(price,values(price))
3.新規の行で、追加が発生する例
insert into test1(id,date_param,price) values('4','2009-01-19',100) on duplicate key update price=least(price,values(price))
なお、上記のon duplicate key updateでは、次の操作をしています。
まさしく、このSQLです。
ありがとうございます。
あ、すいません。
DBのバージョンは、MYSQL5.2です。
SQL文の例はON DUPLICATE KEY UPDATEで処理を
行いたいので、書いてみました。
それと、ちょっと付け足しが足りなかったですね。
すいません。
TEST1には
IDが1でDATE_PARAMが2009-01-19でPRICEが50というのが入ってます。
なので、上記SQLを実行すると、50が100に変わらないようにするには
どうしたらいいでしょうか??
INSERT INTO TEST1
(ID,DATE_PARAM,PRICE)
VALUES (1,'2009-01-19',40) ON DUPLICATE KEY UPDATE PRICE=40
の場合は50が40に変更。
よろしくお願いします。