我遇到問題。基於列名的sql更新
我有T1
,T2
,T_Join
表。
T_Join
:第一列:ID
(唯一)例如:10,11,12,13。第二列:CODE
,它包含的屬性等於T2
的列名稱。例如:類型,來源,部分,重要性。這些由T1
中的ID
標識。根據這一點,屬性的ID的 '源' 是11.
ID CODE
10 type
11 source
12 section
13 importance
在表T1
,第一列是data_ID
這不是唯一的:1020,1020,1020,1022,1022,1022,1023, 1023,1028,1028,1028,1035,1035等
第二列是來自T_Join
的ID。在該實施例4的ID可以屬於1 data_ID
,這些聲明,其中值出現在第三列(VALUE):
data_ID ID VALUE
1020 10 1
1020 11 123
1020 12 9
1020 13 4
1022 10 2
1022 12 15
1023 10 2
1023 11 108
1023 13 2
1028 12 20
...
這意味着與ID 1020中的項的類型1源於No.123,是由存儲在該部分9中的該ID識別的具有第4級重要性的真實對象。
現在,我有一個表T2。第一列與T1中的data_ID相同。在這張表中這些是獨一無二的。其他欄目:(多麼令人驚訝!)類型,來源,部分,重要性。 (在現實中,不僅存在着四種屬性,但至少有五十美元!) 所以表看起來是這樣的:
data_ID type source section importance
1020 1 123 9 2
1022 1 95 3 5
1023 2 108 21 4
1028 1 147 17 5
的T2包含新的數據。我想用這些更新T1.VALUE列。按照上面我的例子,更新後的T1應該是這樣的:
data_ID ID VALUE
1020 10 1
1020 11 123
1020 12 9
1020 13 2
1022 10 1
1022 12 3
1023 10 2
1023 11 108
1023 13 4
1028 12 17
...
所以,在data_ID 1020,其重要性是4,它原來爲2,因爲在T1的ID是13,它是指屬性「重要性'從T_Join表格等等。 我想以這種方式更新所有數據。我不是一個SQL專家,我已經成功地創建此代碼:
update T1 set VALUE =
(select * from T2
inner join T_Join on ID=
(SELECT
c.name
FROM
sys.objects o
INNER JOIN
sys.columns c
ON
c.object_id = o.object_id
AND o.name = 'T2')
where T1.data_ID = T2.data_ID and T2.ID = T_Join.ID)
from T1
inner join T2 on T1.data_ID = T2.data_ID
inner join T_Join on T1.ID = T_Join.ID
select * from T1
,但它不工作,錯誤消息:
消息116,級別16,狀態1 ,第16行 當子查詢未與EXISTS一起引入時,只能在選擇列表中指定一個表達式。
我試圖用CURSOR語句和聲明變量(基於建議)來解決它,但它也不起作用。
請,如果有人有一個想法如何我可以解決這個問題(以最簡單的方式),答案儘可能詳細。
+1你加入了很多關於你有,甚至問題的詳細信息表明你試圖解決它。這是一個很好的第一篇文章。 – Taryn 2013-02-13 15:02:38