gpt4 book ai didi

mysql - 比较表中的数据

转载 作者:行者123 更新时间:2023-11-29 08:29:05 25 4
gpt4 key购买 nike

我有一个场景,我必须检查数据是否已存在于表中。如果用户 n 应用程序已经存在,那么我们不需要执行任何操作,只需执行插入即可。

CREATE TABLE `table1` (
`ID` INT(11) NOT NULL AUTO_INCREMENT,
`GroupName` VARCHAR(100) DEFAULT NULL,
`UserName` VARCHAR(100) DEFAULT NULL,
`ApplicationName` VARCHAR(100) DEFAULT NULL,
`UserDeleted` BIT DEFAULT 0,
PRIMARY KEY (`ID`)
)

CREATE TABLE `temp_table` (
`ID` INT(11) NOT NULL AUTO_INCREMENT,
`GroupName` VARCHAR(100) DEFAULT NULL,
`UserName` VARCHAR(100) DEFAULT NULL,
`ApplicationName` VARCHAR(100) DEFAULT NULL,
PRIMARY KEY (`ID`)
)

table1 是主表,而 temp_table 是我必须执行比较的表。

日期脚本示例:

INSERT  INTO `table1`(`ID`,`GroupName`,`UserName`,`ApplicationName`,`userdeleted`) 
VALUES
('MidasSQLUsers','Kevin Nikkhoo','MySql Application',0),
('MidasSQLUsers','adtest','MySql Application',0),
('Salesforce','Kevin Nikkhoo','Salesforce',0),
('Salesforce','devendra talmale','Salesforce',0);

INSERT INTO `temp_table`(`ID`,`GroupName`,`UserName`,`ApplicationName`,`userdeleted`)
VALUES
('MidasSQLUsers','Kevin Nikkhoo','MySql Application',0),
('MidasSQLUsers','adtest','MySql Application',0),
('Salesforce','Kevin Nikkhoo','Salesforce',0),
('Salesforce','Kapil Singh','Salesforce',0);

此外,如果 int table1 中不存在 temp_table 行,则其状态应为 userdeleted 1,如我在所需输出中提到的那样。

结果:表1

ID  GroupName   UserName    ApplicationName Deleted
1 MidasSQLUsers Kevin Nikkhoo MySql Application 0
2 MidasSQLUsers adtest MySql ApplicationName 0
3 Salesforce Kevin Nikkhoo Salesforce 0
4 Salesforce devendra talmale Salesforce 1
5 SalesForce Kapil Singh Salesforce 0

请帮忙

最佳答案

这应该可以解决问题,更改 concat 内的任何内容,以满足您的规范。

首先进行一次更新以“删除”不在 tempTable 中的行:

   update table t1 set deleted = 'YES' 
where concat( t1.groupName, t1.Username, t1.application) NOT IN
(select concat( t2.groupName, t2.Username, t2.application) from tempTable t2);

第二:插入新记录

insert into table1 t1 (t1.groupName, t1.username, t1.application_name, t1.deleted)

(select t2.groupName, t2.Username, t2.application, t2.deleted from tempTable t2
where concat(t2.userName, t2.application, t2.groupName, t2.deleted) **not in**
(select concat(t3.userName, t3.application, t3.groupName, t3.deleted)
from table1 t3)

concat function将从现有行创建一个新行...这样我可以同时比较多个字段,就好像我只比较一个字段...

"not in"让您在查询中进行查询...

关于mysql - 比较表中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17146161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com