基于另一个表更新一个表中的值

时间:2015-09-28 08:40:15

标签: mysql sql

我有UPDATE个查询,但执行时出错了。 我正在尝试使用表 import_data 中的值更新 table1 中的值,但我需要表 ids 中的id ...所以表格 ids 链接 table1 和* import简单,不是吗?

UPDATE table1
INNER JOIN import_data ON (
    import_data.id = (
        SELECT customer_id 
        FROM ids
        INNER JOIN table1 ON (
            table1.id = ids.link
        )
        WHERE ids.type = 'NORMAL'
    )
)
SET table1.name = import_data.name;

表1

| id       | name      |
|----------|-----------|
| AA-00001 | Company 1 |
| AA-00002 | Company 2 |
| AA-00003 | Company 3 |

import_data

| id     | name              |
|--------|-------------------|
| 401000 | Updated company 1 |
| 401001 | Updated company 2 |
| 401002 | Company 3         |

IDS

| link     | id     | type   |
|----------|--------|--------|
| AA-00001 | 401000 | NORMAL |
| AA-00002 | 401001 | NORMAL |
| AA-00003 | 401002 | NORMAL |

3 个答案:

答案 0 :(得分:1)

尝试:

update table1 t1
inner join (
    select idata.name, ids.link
    from import_data idata
    join ids on ids.id = idata.id
    where ids.type = 'NORMAL'
) x
on x.link = t1.id
set t1.name = x.name

演示 sqlfiddle

答案 1 :(得分:0)

我认为这取决于您使用的数据库。相关帖子在此处得到解答 - How can I do an UPDATE statement with JOIN in SQL?

答案 2 :(得分:0)

我没有mysql来检查它,但它应该按照你想要的方式工作。请检查。

               UPDATE table1
                INNER JOIN ids
                ON table1.id= ids.link
                INNER JOIN import_data 
                on import_data.id = ids.id
                SET table1.name = import_data.name
                WHERE ids.type = 'NORMAL';