2016-09-13 5 views
1

私はすべてのセットに存在する値を抽出するためにSQLを使用しようとしています。SQLの照会はすべてのセットに存在します

表:

+------------+ 
!ID!Set !Word! 
+------------+ 
!1 !I1 !ABC ! 
!2 !I1 !DEF ! 
!3 !I1 !GHI ! 
!4 !I2 !ABC ! 
!5 !I2 !LMN ! 
!6 !I2 !DEF ! 
!7 !I3 !ABC ! 
!8 !I3 !GHI ! 
!9 !I4 !ABC ! 
!10!I4 !ABC ! 
+------------+ 

結果:

+---+ 
!ABC! 
+---+ 

が選択.....それは、設定されたI1、I2、I3およびI4に存在し、そこではない任意のものであるため、 'ABC' を与えます他のセット。

私はMYSQLの中で最も速い声明の後です。あなたの助けに感謝します。

select word 
from t 
group by word 
having count(distinct set) = (select count(distinct set) from t); 

注:

答えて

5

は、ここに1つの方法である重複データ内に存在するので、count(distinct word)のみが必要とされています。

HereはSQL Fiddleです。

+0

(正しい)迅速な回答ありがとうございます。 私は今編集している私の質問をあまり単純化してしまったので、答えはうまくいかないでしょう。 – user2877988

+0

まず、答えは機能しているので、私はあなたのコメントを理解していません。しかし、回答を無効にするような方法で質問を変更するのは失礼です。代わりに、別の質問をするべきです。しかし、あなたの意図にもかかわらず、これはまだ正しい答えです。 –

+0

謝罪ゴードン。私は質問を変える前にあなたに投票を与え、あなたの正解を認めました。そして、変更する前にほぼ同じ質問をするかどうか議論した。 回答はうまくいかない。 もう一度謝罪してください。振り返ってみると、問題を変えることは貧しい実践であることを認識しています。 – user2877988

0

あなたはCONCAT使用して、このようにそれを試すことができます:ここでテスト

SELECT word 
FROM t 
GROUP BY word 
HAVING COUNT(DISTINCT CONCAT(set, word)) = 
(SELECT COUNT(DISTINCT set) FROM t) 

http://sqlfiddle.com/#!9/a80fb/9を。

関連する問題