更新连接行的表

时间:2015-08-16 23:32:16

标签: mysql sql

好的,我有一个包含这样数据的表(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

但它并没有帮助我。

无论如何要完成我需要的东西吗?

1 个答案:

答案 0 :(得分:0)

您需要更新两次 - 1.升序然后 下降

grep -o ">CAM_P\w*\|/sample_name=\w*" filename | awk 'ORS=NR%2?FS:RS'