MYSQL请求显示两张表行的差异并根据行id删除重复字段

标签 mysql database

stackoverflow 上有很多例子可以让你得到两个表的行之间的差异,但是如果我想在重复的情况下得到一个空字段,它们不会考虑重复项。我没有找到合适的例子。例如有一个请求:

SELECT Id, username FROM table1
WHERE (Id, username) NOT IN (SELECT Id, username FROM table2) 

这将输出表 1 中的行,考虑到 id,这些行不存在于表 2 中,但我需要在行字段重复的情况下,查询显示一个空字段以比较多个列。

示例表 1

id |  name | surname
--------------------
1  | Jhon  | Zero
2  | Test  | First
3  | Mike  | Second
4  | James | Third
5  | Ivan  | Fourth
6  | Jhon  | Zero

表2

id |  name | surname
--------------------
1  | Jhon  | Test0
2  | JACK  | First
3  | MIKE  | Second3
4  | Jame  | Third4
5  | Evan  | Fourth
6  | Jhon  | Zero

SELECT输出结果

id |  name | surname
--------------------
1  |       | Zero
2  | Test  | 
3  | Mike  | Second
4  | James | Third
5  | Ivan  | 
6  |       | 

那些。输出字符串时,我需要让重复字段等于 Null - 一个空值,而且所有内容都区分大小写。请写下如何做到这一点,甚至可以使用 mysql。

最佳答案

假设您已使用区分大小写的排序规则创建表,此查询将为您提供所需的结果。它使用 CASE 表达式来比较每个表中的值,只有当它们不同时才输出值。

SELECT t1.id,
       CASE WHEN t1.name != t2.name THEN t1.name END AS name,
       CASE WHEN t1.surname != t2.surname THEN t1.surname END AS surname
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id

输出

id  name    surname
1   null    Zero
2   Test    null
3   Mike    Second
4   James   Third
5   Ivan    null
6   null    null

Demo on dbfiddle

如果您的表具有不区分大小写的排序规则,您将需要重新排序查询中的各个值:

SELECT t1.id,
       CASE WHEN t1.name COLLATE latin1_general_cs != t2.name COLLATE latin1_general_cs THEN t1.name END AS name,
       CASE WHEN t1.surname COLLATE latin1_general_cs != t2.surname THEN t1.surname COLLATE latin1_general_cs END AS surname
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id;

Demo on dbfiddle

关于MYSQL请求显示两张表行的差异并根据行id删除重复字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57600254/

相关文章:

mysql - 为什么我的 JSP 登录页面不工作?我有一个有效的用户名和密码,但是比较输入的语句

java - LockModeType.OPTIMISTIC_FORCE_INCREMENT 这个锁是应用层还是数据库层

php - 我如何用数组计算for循环中的多行?

mysql - 如何在预定时间后执行MySQL中的任务

mysql - 一个强大的 MySQL 管理工具,具有与 SQL Server Management Studio 类似的功能

mysql - 如何根据上次用户帖子将线程放在顶部(凹凸)?

MYSQL:将 NULL 日期与 CURRENT_DATE 进行比较

mysql - 选择数据范围,从第一次出现到最后一次出现

php - MySQL 在 WHERE 语句中按位返回奇数结果

php - 设置一个 MySQL 表来跟踪用户链接点击