【问题标题】:Merge multiple tables into one row in a new table将多个表合并到一个新表中的一行
【发布时间】:2021-07-05 19:17:14
【问题描述】:
UPDATE the_main_table
SET item_Name = (
SELECT item_Name
FROM 1d_high_today
WHERE 1d_high_today.osrs_id = the_main_table.osrs_id
);

UPDATE the_main_table
SET D_high = (
SELECT D_high
FROM 1d_high_today
WHERE 1d_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET D_low = (
SELECT D_low
FROM 1d_high_today
WHERE 1d_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET D_low_volume = (
SELECT D_low_volume
FROM 1d_high_today
WHERE 1d_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET D_high_volume = (
SELECT D_high_volume
FROM 1d_high_today
WHERE 1d_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET D_Margin = (
SELECT D_Margin
FROM 1d_high_today
WHERE 1d_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET D_Volume = (
SELECT D_Volume
FROM 1d_high_today
WHERE 1d_high_today.osrs_id = the_main_table.osrs_id
);

UPDATE the_main_table
SET item_Name = (
SELECT item_Name
FROM 1h_high_today
WHERE 1h_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET H_high = (
SELECT H_high
FROM 1h_high_today
WHERE 1h_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET H_low = (
SELECT H_low
FROM 1h_high_today
WHERE 1h_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET H_low_volume = (
SELECT H_low_volume
FROM 1h_high_today
WHERE 1h_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET H_high_volume = (
SELECT H_high_volume
FROM 1h_high_today
WHERE 1h_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET H_Margin = (
SELECT H_Margin
FROM 1h_high_today
WHERE 1h_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET H_Volume = (
SELECT H_Volume
FROM 1h_high_today
WHERE 1h_high_today.osrs_id = the_main_table.osrs_id
);






UPDATE the_main_table
SET item_Name = (
SELECT item_Name
FROM latest_high_today
WHERE latest_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET l_high = (
SELECT l_high
FROM latest_high_today
WHERE latest_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET l_low = (
SELECT l_low
FROM latest_high_today
WHERE latest_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET L_low_Time = (
SELECT L_low_Time
FROM latest_high_today
WHERE latest_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET L_high_Time = (
SELECT L_high_Time
FROM latest_high_today
WHERE latest_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET L_Margin = (
SELECT L_Margin
FROM latest_high_today
WHERE latest_high_today.osrs_id = the_main_table.osrs_id
);





UPDATE the_main_table
SET item_Name = (
SELECT item_Name
FROM 30m_high_today
WHERE 30m_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET T_high = (
SELECT T_high
FROM 30m_high_today
WHERE 30m_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET T_low = (
SELECT T_low
FROM 30m_high_today
WHERE 30m_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET T_low_volume = (
SELECT T_low_volume
FROM 30m_high_today
WHERE 30m_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET T_high_volume = (
SELECT T_high_volume
FROM 30m_high_today
WHERE 30m_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET T_Margin = (
SELECT T_Margin
FROM 30m_high_today
WHERE 30m_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET T_Volume = (
SELECT T_Volume
FROM 30m_high_today
WHERE 30m_high_today.osrs_id = the_main_table.osrs_id
);


UPDATE the_main_table
SET item_Name = (
SELECT item_Name
FROM 5m_high_today
WHERE 5m_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET F_high = (
SELECT F_high
FROM 5m_high_today
WHERE 5m_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET F_low = (
SELECT F_low
FROM 5m_high_today
WHERE 5m_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET F_low_volume = (
SELECT F_low_volume
FROM 5m_high_today
WHERE 5m_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET F_high_volume = (
SELECT F_high_volume
FROM 5m_high_today
WHERE 5m_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET F_Margin = (
SELECT F_Margin
FROM 5m_high_today
WHERE 5m_high_today.osrs_id = the_main_table.osrs_id
);
UPDATE the_main_table
SET F_Volume = (
SELECT F_Volume
FROM 5m_high_today
WHERE 5m_high_today.osrs_id = the_main_table.osrs_id
);

我有这个庞大的 SQL 查询。

这确实实现了我正在尝试完成的“将多个表列合并到新表中,在 1 行内”

但是只有几千行数据,速度很慢。

有没有办法可以缩短此查询并仍然完成相同的事情?

我尝试了诸如 JOIN 和 union 之类的方法,但无法让它们正常运行。

进行这个非常长的查询是唯一有效的解决方案。

【问题讨论】:

    标签: mysql sql database database-design


    【解决方案1】:

    我不会仔细研究您的所有代码。但从前几个示例中可以清楚地看出,您可以使用join。例如:

    UPDATE the_main_table m JOIN
           1d_high_today ht
           ON ht.osrs_id = m.osrs_id
        SET m.item_Name = ht.item_Name
            m.D_high = ht.D_high,
            m.D_low =  ht.D_low,
            . . .;
    

    为此,您需要1d_high_today(osrs_id) 上的索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-27
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 2011-06-03
      相关资源
      最近更新 更多