2016-08-27 1 views
1

В MySQL я хочу найти разницу между двумя рядами в той же таблице , где мне нужно, чтобы отобразить несовпадающие записиmysql Как найти разницу между двумя строками в одной таблице и перечислить Unmatched Records? 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'); 

Это как таблица выглядит

enter image description here

, где я хочу результат несогласованных записей из таблицы что из сравнения project_1 и Project_2

нужно сравнить оба project_1 и Project_2 от PROJECT_NAME, то он должен получить несовпадающие записи project_detail и project_version

мне нужно привести что-то вроде этого, отображающее только несовпадающие записи см ниже рис

enter image description here

ответ

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 
+0

спасибо soo много –

1

Попробуйте что-то вроде этого:

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 
+0

Вы хотите присоединиться только строки с разными именами проекта. –

+0

большое спасибо –

Смежные вопросы