2017-06-20 15 views
0

同じテーブル内のある行から別の行にデータをコピーするのに苦労しています。基本的には、[I/O#]という列が'Client1'と等しい場合がありますが、列を'Client2'と同じにするには、Client1のデータが消去されていなければなりません。つまり、Client1に関連付けられたデータを保持します。 。 同じテーブル内のある行から別の行にデータをコピーするSQL

は、私は私のPHPファイルではなく、無駄で次のSQLクエリ未遂: $PrevIO$IOはすでに私のPHPファイルで定義されているところで

$sql_UPDATE_query ="UPDATE [$connectionInfo[Database]].[dbo].[form_record] 
        SET 
         [Last_Edit] = newdata.[Last_Edit], 
         [User_Name] = newdata.[User_Name], 
         [Computer_Name] = newdata.[Computer_Name], 
         [form_name] = newdata.[form_name], 
         [Date] = newdata.[Date], 
         [facility] = newdata.[facility], 
         [Count] = newdata.[Count], 
         [Start_Time] = newdata.[Start_Time], 
         [Stop_Time] = newdata.[Stop_Time], 
         [MW/Hrs_Start] = newdata.[MW/Hrs_Start], 
         [MW/Hrs_Stop] = newdata.[MW/Hrs_Stop], 
         [M³] = newdata.[M³], 
         [MCF] = newdata.[MCF], 
         [Litres] = newdata.[Litres], 
         [Description] = newdata.[Description], 
         [Lock] = newdata.[Lock] 
        FROM 
         (
         SELECT 
          [Last_Edit], 
          [User_Name], 
          [Computer_Name], 
          [form_name], 
          [Date], 
          [facility], 
          [Count], 
          [Start_Time], 
          [Stop_Time], 
          [MW/Hrs_Start], 
          [MW/Hrs_Stop], 
          [M³], 
          [MCF], 
          [Litres], 
          [Description], 
          [Lock] 
         FROM [$connectionInfo[Database]].[dbo].[form_record] 
         WHERE 
          [I/O#] = '$PrevIO' 
         ) newdata 
        WHERE 
         [I/O#] = '$IO'"; 

(ちょうどそれを示すされていない)ので、それはどこのエラーではありません嘘。

今、$PrevIO='Client1'$IO='Client2としましょう。 Client1に属しているテーブル[form_record]のすべてのデータ(行)を属性化してClient2にコピーしてから、Client1を削除するか、それ以上に単純に名前を置き換えるだけですが、皆さんはよく知っています。私はnewdataが同じテーブルform_recordのエイリアステーブルとして使用できると思ったが、うまくいかないようだ。

私はMicrosoft SQL 2005 Serverを使用しています。

答えて

1

これは、テーブルに適切な結合を含めるだけです。

$sql_UPDATE_query ="UPDATE UPD 
        SET 
         [Last_Edit] = newdata.[Last_Edit], 
         [User_Name] = newdata.[User_Name], 
         [Computer_Name] = newdata.[Computer_Name], 
         [form_name] = newdata.[form_name], 
         [Date] = newdata.[Date], 
         [facility] = newdata.[facility], 
         [Count] = newdata.[Count], 
         [Start_Time] = newdata.[Start_Time], 
         [Stop_Time] = newdata.[Stop_Time], 
         [MW/Hrs_Start] = newdata.[MW/Hrs_Start], 
         [MW/Hrs_Stop] = newdata.[MW/Hrs_Stop], 
         [M³] = newdata.[M³], 
         [MCF] = newdata.[MCF], 
         [Litres] = newdata.[Litres], 
         [Description] = newdata.[Description], 
         [Lock] = newdata.[Lock] 
        FROM [$connectionInfo[Database]].[dbo].[form_record] UPD 
        INNER JOIN 
         (
         SELECT 
          [Last_Edit], 
          [User_Name], 
          [Computer_Name], 
          [form_name], 
          [Date], 
          [facility], 
          [Count], 
          [Start_Time], 
          [Stop_Time], 
          [MW/Hrs_Start], 
          [MW/Hrs_Stop], 
          [M³], 
          [MCF], 
          [Litres], 
          [Description], 
          [Lock] 
         FROM [$connectionInfo[Database]].[dbo].[form_record] 
         WHERE 
          [I/O#] = '$PrevIO' 
         ) newdata ON ***newdata.field = UPD.field*** 
        WHERE 
         [I/O#] = '$IO'"; 
+0

をそれは、次のエラーメッセージが書かれています:エラー: '*' の近くに不正な構文を。 query ... – Andrew

+1

はい、「*** newdata.field = UPD.field ***」を条件に置き換える必要があります。 –

0

あなたjoin conditionが欠落しています。

$sql_UPDATE_query ="UPDATE A 
        SET 
         [Last_Edit] = newdata.[Last_Edit], 
         [User_Name] = newdata.[User_Name], 
         [Computer_Name] = newdata.[Computer_Name], 
         [form_name] = newdata.[form_name], 
         [Date] = newdata.[Date], 
         [facility] = newdata.[facility], 
         [Count] = newdata.[Count], 
         [Start_Time] = newdata.[Start_Time], 
         [Stop_Time] = newdata.[Stop_Time], 
         [MW/Hrs_Start] = newdata.[MW/Hrs_Start], 
         [MW/Hrs_Stop] = newdata.[MW/Hrs_Stop], 
         [M³] = newdata.[M³], 
         [MCF] = newdata.[MCF], 
         [Litres] = newdata.[Litres], 
         [Description] = newdata.[Description], 
         [Lock] = newdata.[Lock] 
        FROM [$connectionInfo[Database]].[dbo].[form_record] A 
        INNER JOIN 
         (
         SELECT 
          [Last_Edit], 
          [User_Name], 
          [Computer_Name], 
          [form_name], 
          [Date], 
          [facility], 
          [Count], 
          [Start_Time], 
          [Stop_Time], 
          [MW/Hrs_Start], 
          [MW/Hrs_Stop], 
          [M³], 
          [MCF], 
          [Litres], 
          [Description], 
          [Lock] 
         FROM [$connectionInfo[Database]].[dbo].[form_record] 
         WHERE 
          [I/O#] = '$PrevIO' 
         ) newdata ON newdata.field = A.field 
        WHERE 
         [I/O#] = '$IO'"; 
関連する問題