sqlite - 使用 WHERE ... IN 进行多列选择
问题描述
我想更新data
tbl1 中的列,当两者key1
都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
的SELECT
行。
实现这一目标的正确方法是什么?
解决方案
您可以尝试将键放在不同的条件下并使用 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 查询两次(除非优化器很聪明);我认为没有办法避免这种情况,但很高兴被证明是错误的。
推荐阅读
- javascript - 如何从具有多个键的 json 对象中收集数据并将所有值推送到单个键:值数组
- visual-studio-code - VSCode 加载插件失败找不到模块 'eslint-plugin-prettier'
- java - 删除房间内数据库
- c++ - 我在 ifstream input_file(filename); 行中收到错误“没有要调用的匹配函数”;
- python - 它似乎不保存裁剪的图像
- python - google appengine 未授权状态 401
- c++ - 当返回类型声明为 ListNode 时我们可以返回 false
* - git - GIT Merge:合并在不同分支的同一行上进行不同添加的文件
- java - 小解密程序逻辑建议
- bash - bash while read 循环在第一行之后停止(根据 StackExchange 帖子进行更正后)