2013-02-15 42 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