mysql更新表,如果记录不在临时表中

时间:2014-04-06 22:38:04

标签: mysql csv sql-update inner-join

好吧,我有多个MySQL语句导致我正在更新特定表的问题。首先让我告诉你我的代码,然后我将解释我正在尝试做什么:

/*STEP 1 - create a temporary table to temporarily store the loaded csv*/
CREATE TEMPORARY TABLE IF NOT EXISTS `temptable1` LIKE `first60dayactivity`;

/*STEP 2. load the csv into the previously created temporary table*/
LOAD DATA LOCAL INFILE '/Users/me/Downloads/some.csv'
IGNORE INTO TABLE `{temptable}`
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES 
SET CUSTID = 1030,
    CREATED = NOW(),
    isactive = 1;

/*STEP 3. update first60dayactivity table changing isactive for records that are not in the temptable*/
UPDATE `first60dayactivity` fa 
    INNER JOIN `temptable1` temp 
        ON  temp.`mid` = fa.`mid`
        AND temp.`primarypartnername` = fa.`primarypartnername`
        AND temp.`market` = fa.`market`
        AND temp.`agedays` = fa.`agedays`
        AND temp.`opendate` = fa.`opendate`
        AND temp.`CUSTID` = fa.`CUSTID`
SET fa.isactive = IF( temp.`mid` IS NULL, 0, 1 );

/*STEP 4. insert the temp table records into the real table*/
.....blah blah blah.....

好的,首先创建一个临时表,以便我们有一个表来保存导入的.csv数据。接下来,将.csv数据导入临时表(到目前为止,这一切都完美无缺)。

这是我遇到问题的地方。如果在isactive中找不到记录(我导入后),我想要将first60dayactivity表的每条记录的0列更新为temptable1。最后,我收集了一个.csv,.csv有新的实时数据,应该被视为“活动”,我需要将旧数据设置为inactive。因此,更新执行INNER JOIN以匹配多个列,以查看是否在temptable1中找到记录,如果不是,则将活动设置为0,如果在temptable1中找到{1}}然后确保活动状态为1

此处的问题是first60dayactivity中的所有记录都保留1属性以指示它处于活动状态。没有任何内容更新到0,即使我在temptable1中有新的记录证明...有人可以告诉我在查询中我做错了什么吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

temp。mid永远不会是NULL,因为您在加入条件中使用此列并使用INNER JOIN

您的连接(没有插入)应该返回匹配的行。使用LEFT JOIN进行更新应该做我想要做的事情。