mysql - 如何将值映射到mysql中的sinle id?
问题描述
我有以下 2 张桌子
CREATE TABLE ABC(
id int(11) NOT NULL AUTO_INCREMENT,
joveuser varchar(64) DEFAULT NULL,
timestamp date NOT NULL DEFAULT '0000-00-00',
Article int(6) DEFAULT NULL,
PRIMARY KEY (id,timestamp)
);
CREATE TABLE PQR(
id int(11) NOT NULL AUTO_INCREMENT,
statid int(11) NOT NULL,
institutionid int(11) NOT NULL,
PRIMARY KEY (id,institutionid),
UNIQUE KEY statid_2 (statid,institutionid),
KEY statid (statid),
KEY institutionid (institutionid)
) ;
表 ABC
ID | 小丑 | 时间戳 | 文章 |
---|---|---|---|
1 | 美国广播公司 | 2021-02-15 | 85 |
2 | 定义 | 2021-04-25 | 113 |
3 | 吉 | 2021-05-01 | 63 |
4 | jkl | 2021-05-28 | 22 |
5 | mno | 2021-06-18 | 185 |
表 PQR
SID | 状态 | 机构编号 |
---|---|---|
1 | 2 | 22 |
2 | 3 | 33 |
3 | 1 | 44 |
4 | 8 | 55 |
5 | 9 | 66 |
我想将ABC的id与PQR的statid进行比较。如果 id 不存在于 PQR 表中,那么它应该与id一起插入到 PQR 表中,其机构 ID 值为 '999' 。例如,来自ABC的id 4不存在于PQR的statid中,因此它应该使用新行 4,999 进行插入。
样本输出
席位 | 状态 | 机构编号 |
---|---|---|
1 | 2 | 22 |
2 | 3 | 33 |
3 | 1 | 44 |
4 | 8 | 55 |
5 | 9 | 66 |
6 | 4 | 999 |
7 | 5 | 999 |
这里 id 4 和 5 不存在,所以它插入了 2 行 id 和固定机构 ID 值。
如何通过使用查询来实现?
解决方案
INSERT INTO pqr (statid, institutionid)
SELECT id, 999
FROM abc
WHERE NOT EXISTS ( SELECT NULL
FROM pqr
WHERE abc.id = pqr.statid )
如果您为其创建唯一索引,pqr (statid)
则可以简化查询,直到
INSERT IGNORE INTO pqr (statid, institutionid)
SELECT id, 999
FROM abc
推荐阅读
- c# - 每当刷新数据网格时向上移动垂直滚动条
- c# - 在 C# 中对数组进行排序,除了一个数字
- paypal - 如何添加贝宝购物篮?
- drupal - Drupal9 自定义模块
- uwp - UWP - 多语言:在运行时更改语言字符串
- python - Python子进程解码特殊字符
- python - 有什么方法可以在 Windows 10(32 位)中使用 32 位 python3 使用 64 位模块?
- python - 有没有更简单的方法在字符串中的数字后面放置单词?
- shopify - 如何在液体文件中获取唯一值
- asp.net-mvc - MVC WebApp 上的 .NET 5 Scheduled IHostedService 或 BackgroundWorker