0
OK,我有這樣的數據表(MyISAM數據):更新表連接的行
This is `table`
id | field1 | field2 | field3 | field4 | field5
1 | val1 | val2 | val3 | val4 | 1
2 | val1 | val2 | val3 | val4 | 1
3 | val2 | val1 | val4 | val3 | 1
4 | val2 | val1 | val4 | val3 | 1
我需要更新這個表是這樣的(見我的WHERE
條款):
CREATE TEMPORARY TABLE IF NOT EXISTS `table_temp`
AS
(
SELECT
*
FROM
`table`
WHERE
`field7` IS NULL
AND
`field8` IS NULL
AND
`field9` IS NULL
);
UPDATE LOW_PRIORITY IGNORE `table` AS `t`, `table_temp` AS `t2`
SET
`t`.`field7`=CURRENT_TIMESTAMP(),
`t`.`field9`=`t2`.`id`
WHERE
`t`.`field1` = `t2`.`field2`
AND
`t`.`field2` = `t2`.`field1`
AND
`t`.`field3` = `t2`.`field4`
AND
`t`.`field4` = `t2`.`field3`
AND
`t`.`field5` = `t2`.`field5`
AND
`t`.`field7` IS NULL
AND
`t`.`field8` IS NULL
AND
`t`.`field9` IS NULL
查詢完成後
,我有這樣的:
This is `table` after query
id | field1 | field2 | field3 | field4 | field5 | field9
1 | val1 | val2 | val3 | val4 | 1 | **3**
2 | val1 | val2 | val3 | val4 | 1 |
3 | val2 | val1 | val4 | val3 | 1 | **1**
4 | val2 | val1 | val4 | val3 | 1 |
但我需要這個(需要更新所有的4行):
id | field1 | field2 | field3 | field4 | field5 | field9
1 | val1 | val2 | val3 | val4 | 1 | 3
2 | val1 | val2 | val3 | val4 | 1 | **4**
3 | val2 | val1 | val4 | val3 | 1 | 1
4 | val2 | val1 | val4 | val3 | 1 | **2**
實際上,所有的4行受到了影響,但使用IGNORE
不只是一個簡單的關鍵字,field9
有UNIQUE
指數。
至於我能理解,我的查詢每次從同一行開始在t2
- >所以我有IGNORE
和真的影響只有2行,而不是4.我的意思是,當系統即將更新第二排它從一開始看,第一個匹配的where
子句是第3行 - >IGNORE
,因爲當系統更新第1行時,第一個匹配行是id=3
。我需要推動下一行的東西。
我嘗試設置另一個SET
:
...
SET
`t`.`field7` = CURRENT_TIMESTAMP(),
`t`.`field9` = `t2`.`id`,
`t2`.`field7` = CURRENT_TIMESTAMP(),
`t2`.`field9` = `t`.`id`
...
但它並沒有幫助我。
有沒有辦法完成我所需要的?
運行查詢並檢查它返回什麼 選擇 'field7' = CURRENT_TIMESTAMP(), 'field9' ='t2'.'id' FROM'table' as't','table_temp' as't2' WHERE 't'.'field1''''t2'.field2' AND 't'。 'field2' ='t2'.'field1' AND 't'.'field3' ='t2'.'field4' AND 't'.'field4' ='t2'.'field3' AND 't'.'field5' ='t2'.'field5 ' 和 't'.'field7' IS NULL 和 't'.'field8' IS NULL 和 't'.'field9' IS NULL –
該查詢返回我8行用'NULL'每個領域。 – Vlad
我想我應該使用'TRIGGER'或者'PROCEDURE'。誰能幫我這個? – Vlad