我有如下两个表。下面提到的两个表中的 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/