• 締切済み

postgreSQLのupdateについて

postgresqlのupdateについて質問です。 一つのテーブルで二つの列と任意の文字を別の列へ結合するupdate文を作りたいのですが初心者なものでわかりやすくご教授いただけたら幸いです。 UPDATE テーブル名 SET 列3 = '文字' || "列1" || '文字' || "列2" WHERE 列 Is Null; 何卒、よろしくお願い致します。

みんなの回答

回答No.1

上記で動きます。WHERE句を取った形で、psql で実行すると次のようになります。 hoge=# create table t (a int, b varchar(64), c varchar(64), d varchar(64)); CREATE TABLE hoge=# insert into t values (1, '111', 'aaa'); INSERT 0 1 hoge=# insert into t values (2, '222', 'bbb'); INSERT 0 1 hoge=# select * from t; a | b | c | d ---+-----+-----+--- 1 | 111 | aaa | 2 | 222 | bbb | (2 rows) hoge=# update t set d = b || c; UPDATE 2 hoge=# select * from t; a | b | c | d ---+-----+-----+-------- 1 | 111 | aaa | 111aaa 2 | 222 | bbb | 222bbb (2 rows) hoge=# update t set d = b || ' ' || c; UPDATE 2 hoge=# select * from t; a | b | c | d ---+-----+-----+--------- 1 | 111 | aaa | 111 aaa 2 | 222 | bbb | 222 bbb (2 rows) hoge=# なお、列名はダブルクォートでくくる必要はありません。必要なのは、大文字と小文字を区別する場合や、通常許されない文字列を列名に使う場合です。 お役にたちましたでしょうか。

関連するQ&A

  • postgresqlにて全レコードのupdate

    PostgreSQLの全レコードを順次Updateしたいのですが、 SQLの記述方法がわかりません。 [やりたいこと] ユーザ情報を保持しているテーブルに、新しく"ID_TMP"カラムを追加。 カラム"ID_TMP"に、ユーザIDを保持しているカラム"ID_INFO"の内容を書き込む。 コピーしたいレコードが単一の場合、次のSQLで可能だと思うのですが、 テーブルに保持している全レコードを順次処理する方法を教えてください。 update [テーブル名] set ID_TMP = (select ID from [テーブル名] where id = [ID名]); 宜しくお願いいたします。

  • UPDATE文の中でJOIN

    PostgreSQLで、 update文の条件として、ほかのテーブルを使いたいのですが、 updateのなかで,left joinなど結合文をいれることはできるでしょうか? よろしくお願いします。

  • 処理速度について(UPDATE)

    下記の2つのSQL句があります。 どのSQLが処理速度が速いのでしょうか。 また、一般的なのはどのSQLなのでしょうか。 処理1 UPDATE テーブルA SET 項目A = '0' WHERE NVL(項目A,'0') = '0'; 処理2 UPDATE テーブルA SET 項目A = '0' WHERE 項目A IS NULL; 私としては、処理2の方が早いような気がするのですが・・・ 教えてください。お願いします。

  • PostgreSQLの SQL

    PostgreSQLのSQLで空文字判定する場合 =="" , <> "" , !=""ではなく IS NULLで良いのでしょうか? IS NULLは、空の場合とnullの場合の2つを判定しているのでしょうか

  • postgreSQLで分からないことがあります。

    postgreSQLで分からないことがあります。 よろしくお願いします。 下にあるtblというテーブルがあったとき。 下のSQLを実行するとデータがうまく取れているんですが、 CURRENT_DATEは日付型でSUBSTRでとりだした日付は文字列 なのに何故正しく比較できているのでしょうか? 日付型の形式の文字列であれば、RDBMSがかってに日付型にしてくれるのでしょうか? tblテーブル *sdateとedateはtimestamp型です。 sdate      | edate | ----------------------------------------- 2010-5-1 10:00:00 | 2010-5-2 13:00:00| SELECT * FROM tbl WHERE CURRENT_DATE BETWEEN SUBSTR(sdate, 1, 10) AND SUBSTR(edate, 1, 10)

  • updateしてもSQLを終了すると元に戻る

    Oracle_9→access2002 で外注開発されたシステムを利用しています さて、Oracle、SQL_Plusの[update TABLE1 SET FIELD1 = 'X' WHERE FIELD1 IS NULL]等でデータ更新後、[select 列名リスト FROM TABLE1 WHERE 検索条件]で確認すると確かに更新されているが、SQLを終了後、再起動すると元に戻ってしまいますが、どんな原因が考えられますか?update実行後に確定操作等あるのですか? Oracleはまったく初心者ですがお願いします

  • 一発でUPDATE可能でしょうか。

    一発でUPDATEできるでしょうか? A_TABLEとB_TABLEの2テーブルがあります。 上記2テーブルの結合条件は以下のとおりです。  A_TABLE.BOE = B_TABLE.BOE A_TABLEの列KEを更新したいです。 更新の条件はB_TABLE.HANA <= 100のものです。 次のsqlはだめでした。 UPDATE   A_TABLE SET   KE = 1 WHERE   B_TABLE.HANA <= 100 AND   A_TABLE.BOE = B_TABLE.BOE

  • デットロックとFOR UPDATE

    こんにちは。 PostgreSQLのマニュアルを見ますと。次のような文の組み合わせはデットロックになる可能性があるとされてます。 プロセス1 UPDATE accounts SET balance = balance + 100.00 WHERE acctnum = 22222; UPDATE accounts SET balance = balance - 100.00 WHERE acctnum = 11111; プロセス2 UPDATE accounts SET balance = balance - 100.00 WHERE acctnum = 11111; UPDATE accounts SET balance = balance + 100.00 WHERE acctnum = 22222; #PostgreSQL8.1.5のマニュアルの12.3.3を参照しています。 #http://www.postgresql.jp/document/pg815doc/html/explicit-locking.html#LOCKING-DEADLOCKS こういった場合の回避方法なのですが、 プロセス1 SELECT * FROM accounts WHERE acctnum=11111 AND acctnum = 22222 FOR UPDATE; UPDATE accounts SET balance = balance + 100.00 WHERE acctnum = 22222; UPDATE accounts SET balance = balance - 100.00 WHERE acctnum = 11111; プロセス2 SELECT * FROM accounts WHERE acctnum=22222 AND acctnum = 11111 FOR UPDATE; UPDATE accounts SET balance = balance - 100.00 WHERE acctnum = 11111; UPDATE accounts SET balance = balance + 100.00 WHERE acctnum = 22222; とするのは大丈夫なのでしょうか? 本来なら、マニュアルにもある通り、UPDATEの順番を揃えるのがいいのでしょうが、実際にはWHEREの部分が変数で変化してしまうため、少々手間なのです。 実際のところ、このような場合、SELECT ~ FOR UPDATEで大丈夫なのでしょうか?それともテーブルレベルロックを用いるべきでしょうか?あるいはソートを用いるなどしてでも順番をそろえるべきなのでしょうか? 実際の処理はpl/pgsqlの関数の中で、EXECUTE文によって行っています。 なので、なるべく複雑な処理は避けたいところなのです。 できれば情報ソースなども示してご説明いただけるとありがたいです。よろしくお願いいます。

  • UPDATEを同時に実行する

    UPDATE文について質問なんですが、 下記のクエリのように条件の違うものを一度に実行させるということは可能なのでしょうか? UPDATE テーブル名 SET No = '2' WHERE No = '3' ・・・(1) UPDATE テーブル名 SET No = '3' WHERE No = '2' ・・・(2) (1)を実行し(2)を実行すると、期待通りの結果がどうしても得られません。 どなたかわかる方がいらっしゃれば、よろしくお願いしますm(__)m

  • Mysqlのupdate文

    Mysql3.23.42+PHPで下記のようなテーブルで Field| Type ----+------------  a | int  b | varchar  c | varchar  d | timestamp  e | timestamp update文を実行すると、 例  update set b='あ',c='い',e=NULL where a='1'; dまでアッデートされてしまうのですが何ででしょう? 何か特別なことしなくてはいけないのでしょうか?