【问题标题】:Copying data from one row to another in the same table SQL将数据从同一表中的一行复制到另一行 SQL
【发布时间】:2017-11-23 10:23:21
【问题描述】:

我很难在同一个表中将数据从一行复制到另一行。基本上,我有一个情况,其中[I/O#] 列等于'Client1' 但我想让[I/O#] 列等于'Client2' 而不删除归因于Client1 的数据,即我想保留与Client1 但只需将名称替换为 Client2

我在我的 php 文件中尝试了以下 sql 查询,但没有成功:

$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$IO 已经在我的 php 文件中定义(只是没有显示),所以这不是错误所在。

现在,假设$PrevIO='Client1'$IO='Client2。我怎样才能将表[form_record] 中属于Client1 的所有数据(行)归因于并将其复制到Client2,然后最终删除Client1 甚至更好,只需简单地替换名称,但你们知道得更好。我认为newdata 可以用作同一个表form_record 的别名表,但它似乎不起作用。

我使用的是 Microsoft SQL 2005 Server。

【问题讨论】:

    标签: php sql sql-server sql-server-2005


    【解决方案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'";
    

    【讨论】:

    • 是的,您需要将***newdata.field = UPD.field*** 替换为您的情况。
    【解决方案2】:

    你的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'";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 2021-12-28
      相关资源
      最近更新 更多