仅从csv数据更新选择行中的列

时间:2014-06-06 19:37:41

标签: mysql sql csv

我有一个包含7列和数千行的表,我想更新与csv文件中提供的记录匹配的id号(仅保留不匹配的行)的几个行。提供的更新具有匹配的记录ID,只有三个匹配列。 我从提供的csv创建了一个临时表。在临时表中,我将匹配的id列(c1)作为索引,并使c3键。 c3中的内容是文本,并与星号一起存储。 我已经使用update,insert和join方法测试了几十个sql查询。 最接近成功结果的主要问题是更新表格的每一行中的c1和c3字段(之前有唯一和空内容),c1中的重复内容为“1”,并且“< c3中的em> option1 “。以下是表/数据的结构:

    TABLE 1 (T1)
    c1id, c2, c3, c4, c5, c6, c7
    1   a   null    05      red     medium  0.070
    2   b   null    02      Sydney  dark    0.000
    3   c   null    null    crystal null    null
    4   d   null    02      egg     dark    0.114
    5   e   null    03      hard    bright  0.000

    TABLE 2 (T2)
    c1id, c3, c4, c7
    1   *option1*   null    0.025   
    2   *option1*   02      0.000
    5   *option1*   09      0.751

    TABLE 1 Desired Result:
    c1id, c2, c3, c4, c5, c6, c7
    1   a   *option1*   null    red     medium  0.025
    2   b   *option1*   02      Sydney  dark    0.000
    3   c   null        null    crystal null    null
    4   d   null        02      egg     dark    0.114
    5   e   *option1*   09      hard    bright  0.751

    TABLE 1 ACTUAL Result:
    c1id, c2, c3, c4, c5, c6, c7
    1   a   *option1*   05  red     medium  0.070
    1   b   *option1*   02  Sydney  dark    0.000
    1   0   *option1*   08  stone   dark    0.000
    1   d   *option1*   02  egg     dark    0.114
    1   e   *option1*   03  hard    bright  0.000

以下是一些查询尝试:

    update table1, table2 set
        table1.c1=table2.c1
        table1.c3=table2.c3
        table1.c4=table2.c4
        table1.c7=table2.c7
    where table1.c1=table2.c1 ;

    update table1 dest, table2 src set
        dest.c1=src.c1
        dest.c3=src.c3
        dest.c4=src.c4
        dest.c7=src.c7
    where dest.c1=src.c1 ;

    update table1 dest, (SELECT * FROM table1 where c3=*option1*) src 
    SET dest.c4 = src.c4 where dest.c3=*option1*;

    SELECT c1,
    c3,
    c4,
    c7
    FROM table2
    INNER JOIN table1 ON table1.c1 = table2.c2
    WHERE table1.c1 = table2.c1;

0 个答案:

没有答案