好的,我有多个MySQL语句导致我正在更新特定表的问题。首先让我告诉你我的代码,然后我会解释我想要做的事:如果记录不在临时表中,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
...有人能告诉我我在查询中做错了什么吗?
在此先感谢!
故意双重否定(“永远不可能是NULL”)吗?我认为不是:) – sehe
谢谢,你当然是对的。那是个错误。我编辑了我的答案。 – VMai
看起来像你已经解决了我的问题,我知道另一组眼睛看着这会有所帮助!非常感谢。 – sadmicrowave