使用WHERE ... IN进行多列选择

时间:2018-11-30 18:24:57

标签: sqlite

当另一个查询的结果中同时列出了datakey1时,我想更新tbl1中的key2列:

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行中列出key1key2的行。{p>

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

2 个答案:

答案 0 :(得分:0)

您可以尝试将密钥置于单独的条件下并使用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查询两次(除非优化器很聪明);我认为没有办法避免这种情况,但是很高兴被证明是错误的。

答案 1 :(得分:0)

这是解决方案。不是一个漂亮的,但它是一个解决方案。

UPDATE tbl1 set data = "test 123"

where 
(
   (key1 || "," || key2)

   IN

   (select (key1 || "," || key2) from tbl2 where user='123' ) 

)