2016-05-13 141 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); 
相關問題