重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

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

下記のデータベースで『nameフィールドに値がセットされているもののみ』、別の文字に置き換えたいと思いますが、例えば『UPDATE `test` SET `name` = "かきくけ";』のような書き方ではnameフィールドのすべてのレコードを更新してしまいます。
その為、上記SQL文のSET以降で『nameフィールドに値がセットされているもののみ』という条件を付加すれば良いと思ったのですが、どのようなSQL文を書けば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。

CREATE TABLE IF NOT EXISTS `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

INSERT INTO `test` (`id`, `name`) VALUES
(1, 'あいうえお'),
(2, ''),
(3, 'さしす'),
(4, ''),
(5, 'ab');

以上、よろしくお願いします。

A 回答 (2件)

UPDATE 表名


SET 列名=更新値[,・・・]
WHERE 検索条件

という基本的な構文です。

>nameフィールドに値がセットされているもののみ

「値がセットされている、セットされていない」とは、具体的に何をもって判断するのでしょうか?

一般的にはNULLでしょうが、提示された定義では「NOT NULL」でNULLにできないようになっています。

「NOT NULL」をやめ、NULLを「値がセットされていない」状態とするなら、

WHERE `name` IS NOT NULL

といった条件指定になります。

「NOT NULL」はそのままで、「長さ0の文字」を値がセットされていないとするなら、

WHERE `name`>''

だとか

WHERE CHAR_LENGTH(`name`)>0

などの条件指定が考えられます。

とここまで書いて、「長さ0の文字」を格納しているのに気付きました。テーブルの各列の役割や値について、説明するようにして欲しいものです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ご教示いただいたSQLを試したところ、意図した動作となりました。

【NULL許可で値がセットされていない=NULLの場合】
UPDATE `test`
SET `name` = "かきくけ"
WHERE `name` IS NOT NULL

【NULL不許可で値がセットされていない=長さ0の文字列の場合】
UPDATE `test`
SET `name` = "かきくけ"
WHERE CHAR_LENGTH(`name`)>0

それと、値がセットされていないの定義が漏れており、申し訳ございせんでした。
以後、気をつけたいと思います。

以上、よろしくお願いします。

お礼日時:2011/03/07 16:10

nameがvarcharなので、素直に


UPDATE `test` SET `name` = "かきくけ" where not name=''
でよくないですか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ご教示いただいたSQLを試したところ、意図した動作となりました。

このたびはどうもありがとうございました。

以上、よろしくお願いします。

お礼日時:2011/03/07 16:11

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