好吧,我有多个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
中有新的记录证明...有人可以告诉我在查询中我做错了什么吗?
提前致谢!
答案 0 :(得分:1)
temp。mid
永远不会是NULL
,因为您在加入条件中使用此列并使用INNER JOIN
。
您的连接(没有插入)应该返回匹配的行。使用LEFT JOIN
进行更新应该做我想要做的事情。