好的,我有多個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