MySQLサーバのバージョン: 5.1.41
を使ってます。

・やりたいこと
テーブル名:test
id | photo |
1 /aaa/aa.jpg
2 /bbb/bb.jpg
:
:

となっているテーブルに対して フィールド名「photo」に格納されている文字列の先頭に
「 http://www.test.com 」 を全てのレコードに対して追加したいと考えております。

希望する結果
テーブル名:test
id | photo |
1 http://www.test.com/aaa/aa.jpg
2 http://www.test.com/bbb/bb.jpg
:
:

説明不足などございましたら、再度補足させていただきます。
アドバイスのほどよろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

昨日に引き続き回答します。



文字列の連結は concat関数を使用します。

update test
set photo = concat('http://www.test.com', photo)
where photo is not null
and photo not like 'http%';

where句は
「既にphotoに値が入っていて」かつ「まだhtpp...を付加していない」
条件で更新したいかな、と思って付けました。

条件無しで一括で更新して構わなければwhere以降は不要です。

以下は余計なお世話かもしれませんが。。

何かMySQL関連の書籍はお持ちではないのでしょうか?

今回のご質問程度の内容であれば、逆引き系のリファレンスが一冊あれば、「いつ来るかわからない回答を待つ」よりは、確実に速く(かつ正確な)解法が得られます。

Amazon で「MySQL 逆引き」で検索してみてください。
    • good
    • 0
この回答へのお礼

ご回答頂いたSQL文でやりたいことが実現できました!

ご回答ありがとうございます。

お礼日時:2011/04/17 18:21

concat関数を使ってupdateは、既に#1さんが回答されている通りです。



前回の質問で、回答するタイミングがなかったので、参考までに。

「1~100の列値を持つ行を、1回のSQL発行で実装したい」という件。

「1回のSQL」という要件が、どれくらい重要なのか分かりませんが、MySQL 5.0以降とのことなので、ストアドプロシジャで実装するといった方法があります。

ちなみに、

PostgreSQLであれば、

(1)generate_series関数で生成したものをinsert
(2)PostgreSQL 8.4(?)で、「with句での再帰クエリ」が実装されているので、そこで生成したものをinsert

といった実装方法があり得ると思います。再帰クエリは、ちょっと小細工し過ぎではありますが。

SQL Serverでも、SQL Server 2005で、「with句での再帰クエリ」が実装されています。
    • good
    • 0
この回答へのお礼

「ストアドプロシジャで実装」??
まだまだ勉強不足です、、このキーワードでまた語句を勉強してみます。

ご回答ありがとうございます。

お礼日時:2011/04/17 18:23

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qsqlで文字列を最後に追加したい

SqlServer2000でクライアントはクエリアナライザを使っています。
例えばAccessのVBAでは
adoRS!備考 = adoRS!備考.value & "追加する文字列"
とすれば備考フィールドの最後に文字列を追加できますが、
これをsqlで行う場合にはどうればいいですか?

update tblアンケート
set 備考 = 備考 & '追加する文字列'

としても「データ型の演算子が無効です。データ型演算子は boolean AND、データ型は varchar です。」エラーになってしまいます。
エラーの意味もわからず検索もしたのですが解決できませんでした。
宜しくお願い致します。

Aベストアンサー

SQL Serverを使おうというのに、自分でマニュアル類を見る気はないということでしょうか?

文字連結の指定方法は、標準SQLや主要なRDBMSでは「||」を使います。
また、MySQLのようにCONCAT関数を使用するものもあれば、DB2のようにCONCATというキーワードを繰り返し指定するものもあります。

さて、本題のSQL Serverですが、文字連結は「+」を使います。

ちなみにUPDATEで検索条件を指定しないと、全行更新になりますよ。

QUPDATEで既存のレコードに文字列を追加したい

いつもお世話になります。
SQL文で質問があります(環境はPHP+SQLiteです)。

keywordというカラムがあって、そこにはキーワードとして使う文字列が入っています。
(データベースを検索するときに使うタグを集めたようなものです)
例えば、

"本 料理 ブック cooking book"

という感じです。

UPDATEで、このカラムに別のキーワードを追加したい場合、どのようなSQL文にすれば良いのでしょうか?
追加するキーワードは既存のキーワードと重複しないように追加したいです。

例えば、すでに"本 料理 ブック cooking book"というレコードがあるので、UPDATEで「レシピ」を追加したら"本 料理 ブック cooking book レシピ"となるように、「本」を追加する場合はすでに「本」という文字列があるので既存のままで変更なしにしたいです。

そもそもこのようなことはSQL文でできるのでしょうか?

できないとしたら一旦SELECTでkeywordのレコードを取得してPHPで改変したものをUPDATEで上書きするしかないでしょうか?

どうぞよろしくお願い致します。

いつもお世話になります。
SQL文で質問があります(環境はPHP+SQLiteです)。

keywordというカラムがあって、そこにはキーワードとして使う文字列が入っています。
(データベースを検索するときに使うタグを集めたようなものです)
例えば、

"本 料理 ブック cooking book"

という感じです。

UPDATEで、このカラムに別のキーワードを追加したい場合、どのようなSQL文にすれば良いのでしょうか?
追加するキーワードは既存のキーワードと重複しないように追加したいです。

例えば、すでに"本 料理 ブック co...続きを読む

Aベストアンサー

SQLite環境ないため無試験ですが。

構文は参考URLを参照

かんたんに書いておくと
update テーブル名 set 更新列名 = 更新内容 [where条件];
ですよ

set 更新列名 = 更新内容は

set keyword = keyword || 'あああ'
と書ける。等式ではなく代入なのでA=A+1と同じ

でも追加したいキーワードが "本" のとき
keywordが '本社 料理' だったり '貸本 ブック cooking book'だったら
"本" を追加するんですよね?

なのでキーワードを区切る半角スペースを含め判断が必要。

where条件で like検索してNotで否定。つまり含まれないなら更新対象。
Keywordには先頭に、追加文字列は前後に半角スペース補ってから判断。

update テーブル名
set keyword = keyword || ' ' || 追加キーワード
where (' ' || keyword || ' ') not like (' ' || 追加キーワード || ' ')
;
かな

参考URL:http://rktsqlite.sourceforge.jp/sqlite/manip.html#update

SQLite環境ないため無試験ですが。

構文は参考URLを参照

かんたんに書いておくと
update テーブル名 set 更新列名 = 更新内容 [where条件];
ですよ

set 更新列名 = 更新内容は

set keyword = keyword || 'あああ'
と書ける。等式ではなく代入なのでA=A+1と同じ

でも追加したいキーワードが "本" のとき
keywordが '本社 料理' だったり '貸本 ブック cooking book'だったら
"本" を追加するんですよね?

なのでキーワードを区切る半角スペースを含め判断が必要。

where条件で like検索してNotで否定。...続きを読む

Qデータの先頭文字の置換

お世話になります。

AテーブルにBというフィールドがあります。
(Bはvarchar型で、先頭1文字は必ず大文字)

このBすべてのデータの先頭1文字目を「○」という
文字に置き換えて更新するためのSQL文を教えていただけますでしょうか。

よろしくお願いいたします。

Aベストアンサー

以下のようなSQLで可能です。

SQL> select * from a;
B
----------
AAA
BBB
CCCCC
lskf;;;
ddddd

SQL> Update a set b = '○' || substr(b,2,length(b));

SQL> select * from a;

B
----------
○AA
○BB
○CCCC
○skf;;;
○dddd
-----

SQLの意味は以下となります。

'○'    -- 置き換える文字列
||     --文字列連結
substr(b, --bを切り取る
2,     --2行目から
length(b)  --文字列の文字列長。
)

ちなみに関数は以下の特長があるので注意しましょう。

length '文字数基準
substr '文字数基準

lengthb 'バイト数基準
substrb 'バイト数基準

Qupdate文で改行を入れる

こんにちは。
いつもお世話になっています。

update文を使用して、データに改行を入れたいのですが、どうすればよいでしょうか。

対象列のデータ型はVARCHAR2です。

例えばSQLPLUSから、
SPL>update 「テーブル名」set 「対象列」='あ改行い改行う改行'
を投入し、そのあと
select 「対象列」 from 「テーブル名」
とすると
SQL>あ
SQL>い
SQL>う
と出てくればよいんですが、
SQL>update 「テーブル名」set 「対象列」='あ\nい\nう\n'
としても
SQL>あ\nい\nう\n
と、「\n」が文字列としてでてきてしまいます。

SPL>update 「テーブル名」set 「対象列」='あ
2い
3う'
と投入すると、期待通りになるのですが、
そうではなく一行にまとめたいのですがどうすれば良いでしょうか。

Oracle9iを使用しています。
宜しくお願いいたします。

Aベストアンサー

こんにちわyukio200263さん
以下のSQL文でどうでしょうか?

UPDATE 「テーブル名」
SET 「対象列」= 'あ' || CHR(13) || CHR(10) ||'い'

ちょっと長くなってしまいますが、一行で可能です。

QSQL文で右から1文字だけ削除するやり方

MySQL 5.1 利用中です。

テーブルに登録されている文字列が以下のようになっている場合
右から1文字だけを削除するSQL文を教えてください
右から「部とか課や/」が削除されるイメージです。

→SQL実行前

name
経理課
営業部
開発部
部門開発部
RアンドD/

→SQL実行後
name
経理
営業
開発
部門開発
RアンドD

よろしくお願い致します。

Aベストアンサー

nameのケツが「課」か「部」を調べるなら正規表現でしょうね

where name regexp '(部|課)$'

これを利用してupdateすればよいです

//データ作成
create table bumon (name varchar(30));
insert into bumon values('経理課'),('営業部'),('開発部'),('部門開発部'),('RアンドD');

//更新
update bumon set name=left(name,char_length(name)-1) where name regexp '(部|課)$'

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

QSQL 複数テーブルのupdate

こんばんは。
複数テーブルの複数カラムをupdateしたいのですが、
うまくいかず困っています。
どなたか助けてください>_<

テーブルA(tableA)のoptionAというカラムと、
テーブルB(tableB)のoptionBというカラムを両方更新したいんです。

やりたい内容のイメージとしてはこんな感じです↓
update tableA a, tableB b
set a.optionA='OK', b.optionB='OK'
where a.student_id=b.student_id and a.name='山田';

どなたかご指導お願いいたします。

Aベストアンサー

where条件に別テーブルの結合を必要とするので、同時に更新したい・・・
ということならば、以下のようなupdate文を2回発行ではだめなんでしょうか?

update tableB b
set b.optionB='OK'
where exists(
select * from tableA a
where a.student_id=b.student_id and a.name='山田'
);

update tableA a
set a.optionA='OK'
where a.name='山田';

QSQLで特定の項目の重複のみを排除した全項目を取得する方法

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のような構造になっている場合に「項目名1」について重複している項目を排除し、結果として


項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 B    え    イ    江

上のようなデータを取得したいのです。
この時に、Aの重複を排除して取得するレコードは1~3行目のどれでもよいです。
また、データを取得する際には必ずそのレコードの「全項目」を取得したいのでDistinctはうまく使えませんでした。

どなたか詳しい方、方法を教えてくださると幸いです。回答お待ちしております。

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のよ...続きを読む

Aベストアンサー

比較可能で一意性のある値をもてる項目6をテーブルに追加して、

select T.* from T, (select Item1,min(Item6) as Item6 from T group by item1) W where T.item6=W.item6;

――ってやるのが、一番手っ取り早いと思います。
他のところに影響がでないのであればですが。
oracleならrowidを使うとか、レコードの更新時刻を突っ込むとか。

QSQL文について(片方のテーブルに存在しないレコード抽出)

以下のような2つのテーブルがあったとして、
2つともに存在する「店コード」を抽出するのはSQLは分かるのですが、
片方に存在しない「店コード」(以下の例の場合、「2」)を抽出するSQLを
一文で書くにはどうすればいいのでしょうか?

<店テーブル>
店コード住所・・・(その他、基本情報)
1aaa
2bbb
3ccc

<販売テーブル>
店コード販売品目・・・(その他、販売数など)
1xxx
3zzz

Aベストアンサー

オプティマイザ次第だけど、NOT-INは、あまりお勧めでない。
外部結合も索引があっても有効に使われないので、お勧めでない。

select * from A where not exists(select 1 from B where A.店コード=B.店コード);

Qデータベース内のテーブル名の取得

お世話になります。
初心者的な質問でしたらすいません。
SQL文にてデータベース内のテーブル名を
調べることができると聞いたことがあるのですが、
可能でしょうか。

もし、可能であれば、SQLの記述を教えてください。
お願いします。

Aベストアンサー

select * from tab;

私の場合、テーブル名だけ手っ取り早く知りたいとき、↑を打ちます。その他の情報も知りたいときは#2さんの仰るとおり、user_tablesで取得します。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報