mysql 如何查找同一表中两行之间的差异并列出不匹配的记录? mysql在表中查找不匹配的行

Posted

技术标签:

【中文标题】mysql 如何查找同一表中两行之间的差异并列出不匹配的记录? mysql在表中查找不匹配的行【英文标题】:mysql How to Find Difference between two rows in same table and list the Unmatched Records? mysql finding unmatched rows in a table 【发布时间】:2016-08-27 23:54:22 【问题描述】:

mysql 中,我想找出同一张表中两行之间的差异 我需要在哪里显示不匹配的记录

这是我的表,名为project_details

CREATE TABLE IF NOT EXISTS `project_details` (
  `project_name` varchar(100) NOT NULL,
  `project_detail` varchar(100) NOT NULL,
  `project_version` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


INSERT INTO `project_details` (`project_name`, `project_detail`, `project_version`) VALUES
('project_1', 'php_mysql', '1.0'),
('project_1', 'php_mysql_android', '2.0'),
('project_1', 'php_mysql_android_ajax', '3.0'),
('project_2', 'php_mysql', '1.0'),
('project_2', 'php_mysql_android', '2.0'),
('project_2', 'php_mysql_android_ajax', '3.0'),
('project_2', 'php_mysql_jquery', '1.0'),
('project_2', 'php_mysql', '4.0');

这就是桌子的样子

我想要表中不匹配记录的结果 那是通过比较 project_1 和 project_2

需要比较 project_name 中的 project_1 和 project_2 才能得到 project_detail 和 project_version 的不匹配记录

我需要这样的结果,只显示不匹配的记录,请参阅下面 图片

【问题讨论】:

【参考方案1】:

使用NOT EXISTS 检索输出,其中对于不同的项目名称,没有基于详细信息和版本的匹配行:

select *
from project_details p1
where not exists (
  select 1
  from project_details p2
  where p1.project_name <> p2.project_name
    and p1.project_detail = p2.project_detail
    and p1.project_version = p2.project_version
  )

SQL Fiddle 看看它是如何工作的。

输出

project_name    project_detail      project_version
---------------------------------------------------
project_2       php_mysql_jquery    1.0
project_2       php_mysql           4.0

【讨论】:

【参考方案2】:

试试这样的:

 select pd1.* from project_details as pd1 
     left join project_details as pd2 
     on (
       pd1.project_detail=pd2.project_detail and 
       pd1.project_version=pd2.project_version and
       pd1.project_name<>pd2.project_name)
     where pd2.project_name is null

【讨论】:

您只想加入具有不同项目名称的行。

以上是关于mysql 如何查找同一表中两行之间的差异并列出不匹配的记录? mysql在表中查找不匹配的行的主要内容,如果未能解决你的问题,请参考以下文章

如何获取同一列中两行之间的差异

MySQL Workbench中两行之间的差异,但未授权LAG

计算两个不相邻行之间的差异

引导表中两行之间的空格

sql server同一个表中两行数据合并为一行。如表A: name age num ab

如何计算Python Pandas中两列之间的日期差异[重复]