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