好的,我有一个包含这样数据的表(MyISAM):
import sys
sys.path.insert(0, 'MyModule/bin')
import userinfo
我需要像这样更新这个表(参见我的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
但我需要这个(所有4行都需要更新):
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**
不仅仅是一个简单的关键字,IGNORE
还有field9
索引。
据我所知,我的查询每次都从UNIQUE
中的同一行开始 - >所以我t2
和真的只影响了2行而不是4行。我的意思是,当系统即将更新第2行时,它从头开始查看,第一个匹配IGNORE
子句是第3行 - > where
,因为当系统更新第1行时,第一个匹配的行为IGNORE
。我需要一些可以推向下一行的东西。
我尝试设置另一个id=3
:
SET
但它并没有帮助我。
无论如何要完成我需要的东西吗?
答案 0 :(得分:0)
您需要更新两次 - 1.升序然后 下降
grep -o ">CAM_P\w*\|/sample_name=\w*" filename | awk 'ORS=NR%2?FS:RS'