【问题标题】:mysql update table if record not in temp table如果记录不在临时表中,则mysql更新表
【发布时间】: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


    【解决方案1】:

    temp.mid 永远不能是NULL,因为您在连接条件中使用此列并且使用INNER JOIN

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

    【讨论】:

    • 双重否定(“不能永远为 NULL”)是故意的吗?我认为不是:)
    • 谢谢,你当然是对的。那是个错误。我已经编辑了我的答案。
    • 看起来你已经解决了我的问题,我知道另一双眼睛看着这个会有所帮助!非常感谢。
    猜你喜欢
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多