1

テーブル 'commission' の一部の行の更新に問題があります。これで、bar/123/456 のような Commission_number ができました。「user」テーブルから名前を取得して、John/123/456 などに名前を変更したいと思います

commission                       user
-------------------------        -----------------
commission_number|user_id         username|user_id
-------------------------        -----------------
bar/123/456      | 1               John   | 1
bar/123/123      | 2               Bob    | 2
bar/456/123      | 3               Thomas | 3

以下は、「baz」を使用した私のクエリです。しかし、「ユーザー」テーブルから「ユーザー名」を配置する方法がわかりません。「baz」を置き換えて「user」のユーザー名を使用するだけで済みますが、方法がわかりません。

UPDATE commission
SET commission_number = overlay(commission_number placing 'baz' FROM POSITION('bar' IN commission_number) for 3)
WHERE commission_number in (1,2,3,4,5,6,7,8)
4

4 に答える 4

3
update commission 
   set commission_number = u.username || '/' || left(commission_number, -strpos(commission_number, '/'))
from users u
  where u.user_id = commission.user_id
于 2013-03-12T13:47:21.707 に答える
1

このクエリを試してください:

 update commission
 set commission_number=user_table.user_name+
  SUBSTRING(SUBSTRING(commission.commission_number,CHARINDEX('/',commission.commission_number,1)+0,LEN(commission.commission_number))
                ,1
                ,CHARINDEX('/',SUBSTRING(commission.commission_number,CHARINDEX('/',commission.commission_number,1)+1,LEN(commission.commission_number)),1)+LEN(commission.commission_number))
 from commission
 inner join user_table on user_table.user_id=commission.user_id

SQL Fiddleで確認する

SQL Fiddleで表示するのに少し時間がかかりました

于 2013-03-12T13:53:30.227 に答える
1

これは、更新後にデータがどのように見えるかを示しています。文字列関数を扱うときは、この種の select ステートメントをよく使用します。

select c.commission_number, c.user_id, 
       (select username 
        from "user" 
        where "user".user_id = c.user_id) username,
       overlay(c.commission_number 
               placing (select username 
                        from "user" 
                        where "user".user_id = c.user_id) 
               from 1 for 3)
from commission c;

これで、動作することがわかっている用語で update ステートメントを記述できます。

update commission 
set commission_number = overlay(commission_number 
                                placing (select username 
                                         from "user" 
                                         where "user".user_id = commission.user_id) 
                                from 1 for 3);
于 2013-03-12T13:48:41.337 に答える
1

私は何かを実験することから始めます...

UPDATE commission
SET commission_number = 
  (SELECT UserName FROM User WHERE user.user_id=commission.user_id)
   ||SubString(commission_number,4,8000)

そこright(commission_number,-3)から最初の 3 文字を除くすべてを取得することもあります。

何をしようとしているのかわからない
WHERE commission_number in (1,2,3,4,5,6,7,8)

于 2013-03-12T13:39:04.110 に答える