2016-08-11 7 views
-2

私のSQL Serverデータベースには2つのテーブルがあります。Microsoft SQL Server:組み合わせた値を使用して複数の行を更新し、別のテーブルの値と比較します。

表1は次のようになります。今、私はテーブルの列Numberに表2から列Numberの値を挿入する

Material Semifinished  Number 
----------------------------------- 
Steel  Flat 1x2   8991 
Iron  Round 100x200 1234 

Material Semifinished  Number 
----------------------------------- 
Steel  Flat 1x2 
Iron  Round 100x200 

は表2のようになります1.その基準は、列Materialと列Semifinished

の組み合わせである必要があります私もこの1試さ

update T1 
set T1.NUMBER = T2.NUMBER 
from TABLE1 AS T1 
inner join TABLE2 AS T2 on T1.MATERIAL + T1.SEMIFINISHED = T2.MATERIAL + T2.SEMIFINISHED 
where T1.MATERIAL + T1.SEMIFINISHED = T2.MATERIAL + T2.SEMIFINISHED 

:あなたの助けを

ALTER TABLE TABLE1 ADD [NEWCOL] varchar(100) 
ALTER TABLE TABLE2 ADD [NEWCOL] varchar(100) 

update TABLE1 
set NEWCOL = MATERIAL + SEMIFINISHED 

update TABLE2 
set NEWCOL = MATERIAL + SEMIFINISHED 

update T1 
set T1.NUMBER = T2.NUMBER 
from TABLE1 AS T1 
inner join TABLE2 AS T2 on T1.NEWCOL = T2.NEWCOL 
where T1.NEWCOL = T2.NEWCOL 
+1

'インナーはT1.MATERIAL = T2.MATERIALとT1にT2としてTABLE2に参加。 SEMIFINISHED = T2.SEMIFINISHED' – GSerg

+0

JOINと同じ条件でWHERE句を使用したのはなぜですか?それは何を考えていますか? –

+0

そして問題は何ですか? – UnhandledExcepSean

答えて

0

おかげで私は解決策を見つけた私は前にこれを試してみました。

私は最後の部分を少し変更:

update TABLE1 
set NUMBER = T2.NUMBER 
from TABLE1 AS T1 
inner join TABLE2 AS T2 on T1.NEWCOL = T2.NEWCOL 
1

あなたのエラーが再現可能ではありません。

これは私の作品:

DECLARE @Table1 TABLE (
    Material varchar(255) 
, Semifinished varchar(255) 
, Number int 
); 

DECLARE @Table2 TABLE (
    Material varchar(255) 
, Semifinished varchar(255) 
, Number int 
); 

INSERT INTO @Table1 
VALUES ('Steel','Flat 1x2',NULL),('Iron','Round 100x200',NULL); 

INSERT INTO @Table2 
VALUES ('Steel','Flat 1x2',8991),('Iron','Round 100x200',1234); 

update T1 
set T1.NUMBER = T2.NUMBER 
from @Table1 AS T1 
inner join @Table2 AS T2 on T1.MATERIAL + T1.SEMIFINISHED = T2.MATERIAL + T2.SEMIFINISHED 
where T1.MATERIAL + T1.SEMIFINISHED = T2.MATERIAL + T2.SEMIFINISHED 

SELECT * FROM @Table1 

結果:

Material Semifinished Number 
Steel  Flat 1x2  8991 
Iron  Round 100x200 1234 
0

ワークス細かい

DECLARE @T1 TABLE(
    Material NVARCHAR(200), 
    Semifinished NVARCHAR(200), 
    Number INT 
) 

DECLARE @T2 TABLE(
    Material NVARCHAR(200), 
    Semifinished NVARCHAR(200), 
    Number INT 
) 

INSERT INTO @T1 SELECT 'Steel','Flat 1x2',NULL 
INSERT INTO @T1 SELECT 'Iron','Round 100x200',NULL 

INSERT INTO @T2 SELECT 'Steel','Flat 1x2',8991 
INSERT INTO @T2 SELECT 'Iron','Round 100x200',1234 

update T1 
set T1.NUMBER = T2.NUMBER 
from @T1 AS T1 
inner join @T2 AS T2 on T1.MATERIAL = T2.MATERIAL AND 
    T1.SEMIFINISHED = T2.SEMIFINISHED 

SELECT * FROM @T1 
SELECT * FROM @T2 
関連する問題