首页 > 解决方案 > 使用 WHERE ... IN 进行多列选择

问题描述

我想更新datatbl1 中的列,当两者key1key2列在另一个查询的结果中时:

CREATE TABLE tbl1(
  "key1" INT,
  "key2" INT,
  "data" VARCHAR(20)
);

UPDATE tbl1 set data="test 123"
WHERE
   (key1, key2)
IN
   (SELECT key1, key2 from tbl2 where user='123')

SELECT key1, key2 from tbl2 where user='123' 单独返回如下内容:

|key1|key2|
|----|----|
| 2  | 5  |
|----|----|
| 9  | 4  |
|----|----|
| 1  | 12 |
|----|----|

因此,UPDATE必须tbl1只影响行中key1列出key2SELECT行。

实现这一目标的正确方法是什么?

标签: sqlite

解决方案


您可以尝试将键放在不同的条件下并使用 AND。

CREATE TABLE tbl1(
  "key1" INT,
  "key2" INT,
  "data" VARCHAR(20)
);

UPDATE tbl1 set data="test 123"
WHERE
   (key1 IN (SELECT key1 from tbl2 where user='123'))
   AND (key2 IN (SELECT key2 FROM tbl2 WHERE user='123));

这意味着运行 SELECT 查询两次(除非优化器很聪明);我认为没有办法避免这种情况,但很高兴被证明是错误的。


推荐阅读