2012-02-21 11 views
1
のためのクエリを作成する方法

可能性の重複:
Intersect in mysqlretrive共通データ

私は、共通のdata.Iを取得するためのPHPプロジェクトを行う必要がありは、MySQLのクエリを書くことで少し苦手。私は適切な出力を得ることができない.But、さまざまな方法を試してみました

私のテーブルには、これは私のテーブル.Iは、MySQLのクエリは共通の要素を取得書きたいです

Id Product-1 product-2 
------------------------- 
1  A   B 
2  B   C 
3  C   A 
4  E   B 
5  H   C 

です。 例:ここで 、Bは意志することは、ここでの出力はC

3  C   A 
    2  B   C 

ある製品-1、製品-2、 私はA、B の共通要素要素を取得することになるの両方の行を含めることができますどちらかA、BのProduct-1またはProduct-2

と同じです。共通の要素はBです。これについてのクエリ... SQLでは、Intersect操作を使用できます。 しかし、MySQLには何もありませんアイデア。助けてください...

+0

重複している可能性があります:http://stackoverflow.com/questions/2621382/intersect-in-mysql、http://stackoverflow.com/questions/2300322/intersect-in-mysql – Dan

+1

リクエストを明確にしてください、個人的には少なくとも私は本当にあなたが求めているものを見ることができないので、助けられない –

答えて

2

私は何をお勧めしますか?クエリを複雑にする双方向関係の列は、関係を一方向に保ちます。

ので、代わりに次のような意味A to CC to Aの:

Id Product-1 Product-2 
------------------------- 
3  C   A 

あなたが実際にA to CC to Aを意味するためにこれを行う:何の重複がないと仮定すると、次に

、あなたのクエリは、単にこれです:

SELECT Product-1 
FROM tablename 
WHERE Product-2 IN ('A', 'B') 
GROUP BY Product-1 
HAVING COUNT(*) = 2 

しかし、あなたのデータと、次のクエリは、'A', 'B'のための共通の要素を与える:

SELECT Product-1 FROM 
((SELECT Product-1, Product-2 
FROM tablename) 
UNION 
(SELECT Product-2, Product-1 
FROM tablename)) t 
WHERE Product-2 IN ('A', 'B') 
GROUP BY Product-1 
HAVING COUNT(*) = 2 

私は関係を得るように、私がやったことは、逆に関係のコピーを持っている派生テーブルを作成しています片方向にしてから、通常通りに進む。

関連する問題