当另一个查询的结果中同时列出了data
和key1
时,我想更新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
行中列出key1
和key2
的行。{p>
实现此目标的正确方法是什么?
答案 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' )
)