Как обновить таблицу с условием нескольких столбцов? - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь получить результат из таблицы в другой базе данных.

Мой код

Declare @customer table (name, custno, address)

Insert into @customer (custno, address)
values (1, Madrid)

Declare @account table (custno, accno, accbalance)

Insert into @account (custno, accno)
values (1, 2)

Declare @transaction table (accno, accbalance, address)

Insert into @transaction (accno, amount)
values (2, 2)

Теперь я хочу установить

@transaction.address = @customer.address

Я до сих пор не могу найти способ сделать это.

Я ожидаю выхода, когда

select * from @transaction 

Результат

2 | 2 | Madrid

Ответы [ 4 ]

0 голосов
/ 02 января 2019

Вы можете попробовать это, используя join.Помните, что при обновлении с помощью соединения вам необходимо определить имя таблицы как alias, как показано ниже.

Declare @customer table
(name varchar(20),custno varchar(20),[address] varchar(20))

Insert into @customer (custno,[address])
 values (1, 'Madrid')

Declare @class table
 (custno varchar(20), accno varchar(20), accbalance int)

Insert into @class (custno,accno)
 values (1,2)

Declare @transaction table
 (accno varchar(20), accbalance int, [address] varchar(20))

Insert into @transaction (accno,accbalance)
 values (2,2)

UPDATE t 
SET [address] = c.[address]
FROM @transaction as t
INNER JOIN @class as cl on t.accno = cl.accno
INNER JOIN @customer as c
       ON c.custno = cl.custno

select * from @transaction

Вывод такой, как показано ниже.

accno   accbalance  address
---------------------------
2       2           Madrid
0 голосов
/ 02 января 2019

Я бы предложил вам использовать непосредственно данные из исходного источника в таблице Customer, поэтому:

Declare @customer table
(   [name] VARCHAR(10),
    custno VARCHAR(10),
    address VARCHAR(10))

Insert into @customer (custno, address)
 values (1, 'Madrid')

Declare @account table
 (  custno INT,
    accno VARCHAR(10),
    accbalance VARCHAR(10))
Insert into @account (custno,accno)
 values (1,2)

Declare @transaction table
 (  accno INT,
    accbalance VARCHAR(10))
Insert into @transaction (accno,accbalance)
 values (2,2);

И ... запрос будет включать 3 таблицы вместо только транзакции:

 SELECT T.accno, T.accbalance, C.address 
    FROM @transaction T
    INNER JOIN @account A
        ON A.accno = T.accno
    INNER JOIN @customer C
        ON C.custno = A.custno;
0 голосов
/ 02 января 2019

Вы можете использовать обновление с join следующим образом:

UPDATE t
SET t.address = c.address
FROM @transaction t
INNER JOIN @account a
    ON t.accno = a.accno
INNER JOIN @customer c
    ON a.custno = c.custno
0 голосов
/ 02 января 2019

Я думаю, что на этот запрос можно ответить:

    Declare @customer table
(name varchar(50),custno int,address varchar(50))
Insert into @customer (custno,address)
 values (1, 'Madrid')
Declare @class table
 (custno int,accno int,accbalance int)
Insert into @class (custno,accno)
 values (1,2)
Declare @transaction table
 (accno int,amount int ,address varchar(50))
Insert into @transaction (accno,amount)
 values (2,2)


 select * from @customer

 select * from @class

 select * from @transaction


 Update tr set tr.address = cs.address from @transaction as tr join @class as cl on cl.accno = tr.accno JOIN @customer as cs on cs.custno = cl.custno 


 select * from @transaction
...