我有两个SQLite表。我想用table2
中的值更新table1
中的列。
表1,table1 (id INTEGER AUTOINCREMENT, status TEXT, name TEXT);
:
| id | status | name |
|----|-----------|------|
| 1 | pending | xyz |
| 2 | completed | abc |
表2,table2 (status TEXT, name TEXT, trans_id INTEGER);
:
| trans_id | status | name |
|----------|-----------|------|
| 1 | refunded | cvb |
| 2 | cancelled | asd |
我想将状态和名称从表2更新到表1,其中table1.id = table2.trans_id
。我有这个疑问:
UPDATE table1
SET status = (SELECT t2.status FROM table1 t1,table2 t2 WHERE t1.id = t2.trans_id) ,
name = (SELECT t2.name FROM table1 t1,table2 t2 WHERE t1.id = t2.trans_id)
WHERE id IN (SELECT trans_id FROM table1 t1,table2 t2 WHERE t1.id = t2.trans_id)
它错误地填充了表1。这是生成的表1
| id | status | name |
|----|----------|------|
| 1 | refunded | cvb |
| 2 | refunded | cvb |
我的要求是:
| id | status | name |
|----|-----------|------|
| 1 | refunded | cvb |
| 2 | cancelled | asd |
我的查询有什么问题?我怎么才能做到呢?
2条答案
按热度按时间vxqlmq5t1#
我假设
t2.trans_id
是uniq
或table2
中的primary key
。如果不是,那么如果它返回多个结果,那么更新查询将爆炸。在这种情况下,您需要使用WHERE
或TOP 1
应用更多过滤器,如果需要任何结果。9lowa7mx2#
如果table2中存在id列,则前面的回答将失败。最好使用全名table1.id