2014-02-17 37 views
0

我有一个问题,我认为很简单,但我似乎遇到了一些麻烦。MySQL加入多列查询

我有两个表。每个表具有完全相同的行。

我试图执行与下面的查询在两个表联接:

SELECT t1.`* FROM `person` as t1 
     JOIN `person_temp` as t2 
     on t1.`date` = t2.`date` 
     and t1.`name` = t2.`name` 
     and t1.`country_id`= t2.`country_id` 

此查询的一点是要找到所有在T1匹配T2那天起,其中组合行,名称和country_id是相同的(这三列组合在一起使记录具有唯一性)。我不认为这个查询对我所要做的事是正确的,因为如果我在两个表中都有相同的确切数据,我会得到更多的匹配数。

关于如何编辑此查询来完成我想要做的任何想法?

+0

请在sqlfiddle中发布你的代码和表结构,我们可以解决问题。 –

+0

这应该是正确的,除非你在表中有重复。 –

回答

1

请勿使用join。使用exists

SELECT t1.`* 
FROM `person` t1 
where exists (select 1 
       from `person_temp` as t2 
       where t1.`date` = t2.`date` 
       and t1.`name` = t2.`name` 
       and t1.`country_id`= t2.`country_id` 
      ); 

出于性能考虑,你想在person_temp(date, name, country_id)复合指数(列可以按任何顺序)。