首页 > 解决方案 > 如何将值映射到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

我想将ABCidPQR的statid进行比较。如果 id 不存在于 PQR 表中,那么它应该与id一起插入到 PQR 表中,其机构 ID 值为 '999' 。例如,来自ABC的id 4不存在于PQRstatid中,因此它应该使用新行 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 值。

如何通过使用查询来实现?

标签: mysqlsqldatabasesql-insertdatabase-administration

解决方案


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

推荐阅读