2013-02-15 51 views
0
UPDATE Fact_List sfl, Respondents_Dim rd SET sfl.Zip = rd.Zip where sfl.Panel_Id=rd.Panel_Id HAVING MAX(rd.Valid_From) 

respondents_dim` (
    `Respondents_Key` int(11) NOT NULL AUTO_INCREMENT, 
    `Panel_Id` int(11) DEFAULT NULL, 
    `First_Name` varchar(100) DEFAULT NULL, 
    `Last_Name` varchar(100) DEFAULT NULL, 
    `Specialty` varchar(100) DEFAULT NULL, 
    `Dataset` varchar(50) DEFAULT NULL, 
    `Age` int(11) DEFAULT NULL, 
    `Sex` varchar(10) DEFAULT NULL, 
    `Zip` varchar(100) DEFAULT NULL, 
    `Valid_From` date DEFAULT NULL, 
    `Valid_To` date DEFAULT NULL) 

CREATE TABLE IF NOT EXISTS `fact_list` (
    `Panel_Id` int(11) DEFAULT NULL, 
    `Project_Id` int(11) DEFAULT NULL, 
    `Zip` varchar(100) DEFAULT NULL, 
    `Employee_Id` int(11) DEFAULT NULL, 
    `Created_Date` date DEFAULT NULL 
) 

第一個更新的命令是從respondents_dim其中兩個連接使用panel_id但可能有多個記錄與該ID和最新VALID_FROM日期郵編更新fact_list表應該被考慮。誤差在MySQL查詢的加入,採摘最新日期記錄

我試圖執行它,但它是給下面的錯誤

1064 - 你在你的SQL語法錯誤;檢查對應於您的MySQL服務器版本的手冊,以在第1行'HAVING MAX(rd.Valid_From)'附近使用正確的語法。

查詢中是否有任何錯誤?

回答

0

左嘗試加入: -

編輯:刪除別名,並把表的名稱。

編輯2:試試一次。

UPDATE Fact_List left join Respondents_Dim on Fact_List.Panel_Id=Respondents_Dim.Panel_Id SET Fact_List.Zip = Respondents_Dim.Zip 
where Respondents_Dim.Valid_From in (select MAX(Respondents_Dim.Valid_From) from Respondents_Dim) 
+0

同樣的錯誤#1064 - 你在你的SQL語法錯誤;檢查對應於您的MySQL服務器版本的手冊,在第1行'HAVING MAX(rd.Valid_From)'附近使用正確的語法 – user1597811 2013-02-15 08:52:45

+0

現在檢查@ user1597811。如果它的工作正常,然後接受答覆/解決。 – Bajrang 2013-02-15 09:20:49

+0

嗨,Lucia,謝謝你的回覆。我試過了,但仍然是上面提到的同樣的錯誤。 – user1597811 2013-02-15 09:25:21

0

試試這個:

UPDATE fact_list fl 
LEFT JOIN respondents_dim rd 
ON rd.Panel_Id = fl.Panel_Id 
SET fl. Zip = rd.Zip 
WHERE rd.Valid_From = (SELECT MAX(Valid_From) 
         FROM respondents_dim rd2 
         WHERE rd2.Panel_Id = rd.Panel_Id) 

或避免相關子查詢:

UPDATE fact_list fl 
INNER JOIN respondents_dim rd 
ON rd.Panel_Id = fl.Panel_Id 
INNER JOIN 
    (SELECT Panel_Id, MAX(Valid_From) AS max_Valid_From 
    FROM respondents_dim 
    GROUP BY Panel_Id) AS rd2 
ON rd.Panel_Id = rd2.Panel_Id 
AND rd.Valid_From = rd2.max_Valid_From 
SET fl.Zip = rd.Zip 
+0

感謝您的回答。它以某種方式運行了很長時間,沒有更新任何東西? – user1597811 2013-02-15 11:59:37

+0

@ user1597811嘗試不相關的查詢,如果它仍然很慢,請確保在Panel_ID和Valid_From上有索引。 – 2013-02-15 12:31:12