【发布时间】:2014-04-06 22:38:04
【问题描述】:
好的,我有多个 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 数据导入到临时表中(到目前为止,这一切都完美无缺)。
这是我遇到问题的地方。如果在temptable1 中找不到记录(在我导入后),我想将first60dayactivity 表的每条记录的isactive 列更新为0。最终,我正在收集一个 .csv,.csv 包含应该被视为“活动”的新实时数据,我需要将旧数据设置为 inactive。因此,更新会在多个列上进行 INNER JOIN 匹配,以查看是否在 temptable1 中找到记录,如果没有,则将活动设置为 0,如果在 temptable1 中找到,则确保活动状态为1。
这里的问题是first60dayactivity 中的所有记录都保留1 属性以表明它处于活动状态。即使我有证据证明temptable1 中存在新记录,也没有更新到0...有人可以告诉我我在查询中做错了什么吗?
提前致谢!
【问题讨论】:
标签: mysql csv sql-update inner-join