2012-09-04 133 views
0

2代MySQL表数据我有2个表city_sessions_1city_sessions_2两个表的 结构是相似的比较具有相同的结构

CREATE TABLE `city_sessions_1` (
    `city_id` int(11), 
    `session_date` date, 
    `start_time` varchar(12), 
    `end_time` varchar(12) , 
    `attendance` int(11) , 
    KEY `city` (`city_id`), 
    KEY `session_date` (`session_date`) 
) ENGINE=MyISAM; 

注意这些表没有任何主键,但他们有他们的索引定义。两个表具有相同的行数。但预计一些数据会有所不同。

如何比较这两个表格的数据?

+0

出来放你想 –

+0

http://whatHaveYouTried.com –

+0

什么是你的[交集]后(http://en.wikipedia.org/wiki/Intersection_(set_theory))(什么是相同的)或[对称差异](http://en.wikipedia.org/wiki/Symmetric_difference)(有什么不同)? – eggyal

回答

1
-- We start with the rows in city_session_1, and their fit in city_session_2 
SELECT 
    * -- or whatever fields you are interested in 
FROM city_sessions_1 
    LEFT JOIN city_sessions_2 ON city_sessions_1.city_id=city_sessions_2.city_id 
WHERE 
    -- Chose only those differences you are intersted in 
    city_sessions_1.session_date<>city_session_2.session_date 
    OR city_sessions_1.start_time<>city_session_2.start_time 
    OR city_sessions_1.end_time<>city_session_2.end_time 
    OR city_sessions_1.attendance<>city_session_2.attendance 

UNION 

-- We need those rows in city_session_2, that have no fit in city_session_1 
SELECT 
    * -- or whatever fields you are interested in 
FROM city_sessions_2 
    LEFT JOIN city_sessions_1 ON city_sessions_1.city_id=city_sessions_2.city_id 
WHERE city_sessions_1.city_id IS NULL 
+0

您可以将'UNION'更改为'UNION ALL'以加快速度。无论如何+1是的,一个小调整,但一个调整。 – fancyPants

+0

@tombom'UNION'保证不会产生重复,前半部分city_sessions_1.city_id allways'not null',后半部分总是'null'。这可以立即在重复数据删除过程中找到(city_sessions_1是第一个查询的驱动表),从而导致接近零的开销。 –

相关问题