2016-05-13 56 views
0

我想写一个SQL查询来提取具有相同model_number字段,但不同primary_use字段的单个表中的记录。我能够查询重复项,但是如果记录真的是重复的或者primary_use不同,我的查询就没有区别。对于记录在两个字段中都有相同信息的地方,我不感兴趣,只在出现不匹配的地方。查询在一个字段中相同但在另一个字段中不同的记录?

+0

从本质上讲,理想的查询将返回行,而其他行的表与在MODEL_NUMBER字段相同值的计数> 1,但这些行在其primary_use字段中都有不同的值。 – Ashworth

+0

你在用什么数据库? MySQL,SQL Server,Oracle,Postgres等。? – JNevill

+0

我正在使用SQLite – Ashworth

回答

1

使用SQLite我认为最好的办法是自连接:

SELECT DISTINCT t1.*, t2.* 
FROM yourtable as t1 
    INNER JOIN yourtable as t2 ON 
     t1.model_number = t2.model_number AND 
     t1.primary_use <> t2.primary_use; 

联袂表格与model_number相同,但primary_use不同,然后返回不同的表格结果应该给你后面的东西。

+0

这工作得很好!谢谢。 – Ashworth

+0

很高兴听到它! – JNevill

+0

该查询可能*效率低下,特别是当给定的模型具有多个具有相同'primary_use'的重复行时。 –

0

一些例子会有所帮助,但它听起来像是

select distinct model_number, primary_use from [table] 

或许

select model_number, primary_use from [table] 
group by model_number, primary_use 
0

最有效的方法是使用exists

select t.* 
from t 
where exists (select 1 
       from t t2 
       where t2.model_number = t.model_number and t2.primary_use <> t.primary_use 
      ); 

为了提高效率,你想对t(model_number, primary_use)的索引。

或者,如果你只是想的型号:

select model_number 
from t 
group by model_number 
having min(primary_use) <> max(primary_use); 
相关问题