2016-12-26 6 views
0

私はテーブルTableaTablebの両方で一般的な1列(p_id)しか持っていません。別の列をIDとして使用せずにTablebの列をTableaから更新する方法

Tablea,p_idの値は101~109であり、Tableb,p_idの値はnullです。

Tablebp_idの値をTableap_idの値に更新する必要があります。

どうすればいいですか?

私は、クエリの下に実行してきましたが、それは別のID列なしでは動作しません:

update tableb set pid=(select tablea.pid from tablea) where tableb.id between 1 and 9; 

し、それが次のエラーメッセージを返す:

メッセージ512、レベル16、状態1を行197サブクエリは1より多くを返しました 値。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。ステートメントは終了されました。

1から9までの値を含むTableb内の別の列ID

+0

エラーは、あなたが 'tableb'のpidに' 1'以上の値を設定しようとしていると言います。 –

+2

テーブル間には関係がありますか?もしそうなら、それに言及してください。 –

+0

はい、tablebのp_idは外部キーとして使用されます。そして、tablebのp_idのすべての値を更新したいp_id –

答えて

1

試してみてください。

CREATE TABLE #TABLE_A (PID INT) 

INSERT INTO #TABLE_A 
SELECT 101 
UNION ALL 
SELECT 102 
UNION ALL 
SELECT 103 
UNION ALL 
SELECT 104 
UNION ALL 
SELECT 105 
UNION ALL 
SELECT 106 
UNION ALL 
SELECT 107 
UNION ALL 
SELECT 108 
UNION ALL 
SELECT 109 


CREATE TABLE #TABLE_B (ID INT, PID INT) 

INSERT INTO #TABLE_B 
SELECT 1, NULL 
UNION ALL 
SELECT 2, NULL 
UNION ALL 
SELECT 3, NULL 
UNION ALL 
SELECT 4, NULL 
UNION ALL 
SELECT 5, NULL 
UNION ALL 
SELECT 6, NULL 
UNION ALL 
SELECT 7, NULL 
UNION ALL 
SELECT 8, NULL 
UNION ALL 
SELECT 9, NULL 

今すぐにTABLE_Bを更新し、以下の文のよう

UPDATE #TABLE_B SET #TABLE_B.PID = T_A.PID 
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) SNO , PID FROM #TABLE_A 
)AS T_A 
INNER JOIN (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) SNO , ID, PID FROM #TABLE_B 
)AS T_B ON T_A.SNO = T_B.SNO 
WHERE #TABLE_B.ID = T_B.ID 

方法2:しかし、ハードコード

UPDATE #TABLE_B SET #TABLE_B.PID = A.PID 
FROM #TABLE_A A 
INNER JOIN #TABLE_B B ON A.PID-100 = B.ID 
+0

方法2は鉱山に似ていますが、決して気にしません。 – Susang

+0

私は試してみるとあなたの答えは見られませんでした。ごめんなさい。 @Suraz –

+0

方法2は動作しませんが、行は有効になりますが、ステータスをチェックするときにはまだヌルです。 –

1

我々は単にJOINからそれを達成することができますがあり、これは、このソリューションは、データであるtableA

からあなたNULLpid秒を更新します特定の値を追加する必要があります。

私はPIDはそう上記のコードでは、それはNULL値を確認し、それに応じて更新していますが、すべてのNULL値を更新したくないならば、あなたは

AND b.id between 1 and 9; 

として WHEREに条件を追加することができます ID 1 to 9の場合はnullだと思います

上記のアップデートをお試しください。あなたが言ったように、以下の

スキーマのよう

+0

こんにちは@surazそれは私のために動作しません –

+0

@ JasonClark最後の1つの更新クエリを試してください。 – Susang

関連する問題