选择返回更新

时间:2014-05-06 16:27:15

标签: mysql sql

我正在尝试将Select feed返回的值返回到另一个sql语句。

CREATE TABLE TempModeData
(
  Mode_ID nvarchar(100),
  MaxDetectRange nvarchar(100),
  MinDetectRange nvarchar(100),
  AvgDetectRange nvarchar(100)
);
INSERT INTO TempModeData(Mode_ID)
SELECT DISTINCT mode_id AS Mode_ID FROM detection_report;

结果

Mode_ID  MaxDetectRange  MinDetectRange AvgDetectRange
44       Null            Null           Null
63       Null            Null           Null

我有这个表,现在我想输入这个Select语句的返回

SELECT MAX(rng) AS MaxDetectRange FROM detection_report WHERE mode_id=44;

结果

MaxDetectRange
1234.99

我想要

Mode_ID  MaxDetectRange  MinDetectRange AvgDetectRange
44       1234.99         Null           Null
63       Null            Null           Null

2 个答案:

答案 0 :(得分:4)

我认为以下查询可以帮助您

对于插入记录

INSERT INTO TempModeData(Mode_ID,MaxDetectRange)
SELECT DISTINCT a.mode_id AS Mode_ID,b.MaxDetectRange FROM detection_report a
LEFT OUTER JOIN
(SELECT mode_id , MAX(rng) AS MaxDetectRange FROM detection_report 
GROUP BY mode_id) b ON a.mode_id = b.mode_id

用于更新现有记录

 UPDATE TempModeData 
   JOIN (SELECT mode_id , MAX(rng) AS MaxDetectRange FROM detection_report 
     GROUP BY mode_id) a
   ON TempModeData.mode_id = a.mode_id
 SET TempModeData.MaxDetectRange = a.MaxDetectRange;

答案 1 :(得分:1)

你也可以计算出Max,Min&平均范围并将其与原始插入一起添加以用于将来的任何记录,如下所示:

CREATE TABLE TempModeData
(
    Mode_ID nvarchar(100),
    MaxDetectRange nvarchar(100),
    MinDetectRange nvarchar(100),
    AvgDetectRange nvarchar(100)
);

INSERT INTO TempModeData(Mode_ID,MaxDetectRange,MinDetectRange,AvgDetectRange)
SELECT
     mode_id AS Mode_ID
    ,MAX(rng) AS MaxDetectRange
    ,MIN(rng) AS MinDetectRange
    ,AVG(rng) AS AvgDetectRange
FROM detection_report
GROUP BY mode_id;

这样可以避免以后再运行更多UPDATE语句来添加额外的信息。