2010-01-06 143 views
24

我很困惑如何將列從一個表複製到另一個表使用何處。我編寫了SQL查詢,但它說超出事務鎖定時間或查詢返回多行。
用mysql
基本上,
我:將一列從一個表複製到另一個

Table 1: Results 
BuildID platform_to_insert 

Table 2: build 
BuildID correct_platform 

update results set results.platform_to_insert 
    = (select correct_platform from 
     build where results.BuildID = build.BuildID) 
+0

你在每張表中有多少行?向我們展示MySQL提供的完整且實際的錯誤消息 – 2010-01-06 19:23:28

+2

您編寫查詢的方式的確可以從子查詢中返回多行:如果給定的buildID存在多於一個的值,應該採用correct_platform的哪個值? – davek 2010-01-06 19:24:32

+0

我想要做的是:對於結果中的每個BuildID,將其與build中的Build ID進行比較,然後從結構 – JPro 2010-01-06 19:32:36

回答

66

我不相信你需要一個子查詢。

UPDATE results, build 
SET results.platform_to_insert = build.correct_platform 
WHERE results.BuildID = build.BuildID 
+2

多數民衆贊成真棒查詢解決我的問題非常感謝 – 2012-06-27 14:10:35

+0

哇,真棒的答案。這從根本上改變了我對關係數據庫的理解 – Mansiemans 2014-03-20 14:38:45

+0

嗨,我已經試過這個查詢,但不能正常工作請檢查:更新staff_login_times,staff_rotas SET staff_login_times.scheduled_start = staff_rotas.startdate WHERE staff_login_times.actual_start = staff_rotas.startdate; – HIR 2016-11-30 11:32:46

5

有兩個選項:

  1. 更新你的表使用BuildID作爲主鍵(以避免重複)
  2. 更新您的子查詢以僅返回一個結果

    UPDATE results SET results.platform_to_insert = (
        SELECT correct_platform 
        FROM build 
        WHERE results.BuildID=build.BuildID LIMIT 1 
    ); 
    
+0

我想在結果 – JPro 2010-01-06 19:43:05

+0

更新所有行中的問題是,WHERE子句匹配的多個元素子查詢。這可以通過將子查詢的結果集限制爲一個或使* .BuildID成爲主鍵來解決,以避免重複。 無論哪種情況,所有的行都會被更新。 – tmpvar 2010-01-06 20:14:13

相關問題