mysql - 如何使用 MySql 'Insert Ignore into' 查询根据不同表中的某些值插入记录

标签 mysql

我有如下两个表。下面提到的两个表中的 Id 列值都是自动递增的。

登录信息
+----+------------+------------+
| Id | LoginName | IP |
+------+------------+------------+
| 1 | 用户 1 | aa.bb.cc.dd|
| 2 | 用户2 | xx.xx.xx.xx|
| 3 | User3 | ii.ii.ii.ii|
+----+------------+------------+

用户组
+----+------------+------------+
| Id | LoginName | 组 |
+------+------------+------------+
| 1 | User1 | Group1 |
| 2 | 用户 1 | 默认 |
| 3 | User2 | Group2 |
| 4 | User3 | Group3 |
+----+------------+------------+

LoginInfo 表中的每个用户都应该是 UserGroups 表中“默认”组的成员。因此在上表中,User1 关联到“默认”组,但 User2 和 User3 没有。

我想检查是否为 UserGroups 表中的每个用户添加了“默认”组条目。如果可用,则忽略插入,否则为该用户插入新记录。

我试过的mysql查询是
INSERT IGNORE INTO USERGROUPS(LOGINNAME, GROUPS) SELECT LOGINNAME, 'Default' FROM LOGININFO L WHERE L.IP IS NOT NULL;
执行后,消息显示为 3 行受影响,UserGroups 表看起来像

+----+------------+------------+
| Id | LoginName | 组 |
+------+------------+------------+
| 1 | User1 | Group1 |
| 2 | 用户 1 | 默认 |
| 3 | User2 | Group2 |
| 4 | User3 | Group3 |
| 5 | 用户 1 | 默认 |
| 6 | 用户 2 | 默认 |
| 7 | User3 | 默认 |
+----+------------+------------+

但我实际寻找的是如下

+----+------------+------------+
| Id | LoginName | 组 |
+------+------------+------------+
| 1 | User1 | Group1 |
| 2 | 用户 1 | 默认 |
| 3 | User2 | Group2 |
| 4 | User3 | Group3 |
| 5 | 用户 2 | 默认 |
| 6 | 用户 3 | 默认 |
+----+------------+------------+

请告知有关查询或任何解决方法的建议。

最佳答案

在执行 INSERT IGNORE 之前必须添加唯一约束:

ALTER TABLE UserGroups ADD UNIQUE (LoginName, Groups)

然后你可以执行这个查询:

INSERT IGNORE INTO USERGROUPS(LOGINNAME, GROUPS)
SELECT LOGINNAME, 'Default'
FROM LOGININFO
WHERE IP IS NOT NULL

请看这个fiddle .

关于mysql - 如何使用 MySql 'Insert Ignore into' 查询根据不同表中的某些值插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32913845/

相关文章:

mysql - Json响应与数据库数据不匹配

php - 如何在一个查询中执行插入操作?

c# - 获取数据库中最后创建的条目

php - 将事务用于具有相关结果的查询

java - JPA 执行查询但未插入数据

php - 更新两行以进行加法和减法

mysql - 从 TABLE_NAME : with constant GMT 中选择 A、B、C、GMTDATE

php - 仅显示 laravel 中文本中的字母数

MySQL InnoDB - 如何使表仅附加?

php - (MySQL)需要从多个表中获取匹配分数,并按它们的分数之和排序