sql - (一张表)插入行
问题描述
这个问题是这个问题的延续。
我有下表egr
:
+---------+------------+
| offid | groupid |
+---------+------------+
| 1 | 101 |
| 1 | 202 |
| 2 | 202 |
| 2 | 404 |
+---------+------------+
我想插入 offid 2 没有的缺失 groupids(与 offid 1 相比)。结果将是:
+---------+------------+
| offid | groupid |
+---------+------------+
| 1 | 101 |
| 1 | 202 |
| 2 | 202 |
| 2 | 404 |
| 2 | 101 | --> new row to insert
+---------+------------+
我的尝试,基于我的另一个问题的答案(不工作):
INSERT INTO egr (offid, groupid)
SELECT 2, egr1.groupid
FROM egr AS egr1
WHERE egr1.offid = 1
AND NOT EXISTS
(select 1
from egr e2
where e2.groupid = egr1.groupid and
e2.offid in (1, 2) and
e2.offid <> egr1.offid
);
解决方案
使用操作符可能更容易实现except
:
INSERT INTO egr (offid, groupid)
SELECT 2, groupid
FROM egr
WHERE offid = 1
EXCEPT
SELECT 2, groupid
FROM egr
WHERE offid = 2
推荐阅读
- mysql - MySQL将分数列添加到SELECT高分查询
- python-3.x - 将局部变量从函数传递到另一个函数 - 自动化无聊的练习
- javascript - 填写所有必需的输入后按钮滑动
- json - 使用 jq 删除与另一个 JSON 文件中的列表匹配的键
- python - 如何修复将 $ 解释为 $text $ 中的分隔符的数据框?
- javascript - 使用 Lazysizes RIaS 插件有条件地更改数据大小的输出
- c - 嵌套结构值更改时没有任何函数作用于它们。帮助我理解为什么
- regex - 并非所有匹配项都存在时的常规 Expr
- java - 匿名 new View.OnClickListener() 可以替换为 lambda
- javascript - 为什么 JS parseInt 函数对于大整数的行为是这样的?