2012-01-26 9 views
1

私はこの問題の脳ブロックを少し持っていますが、私は解決策を探すのが難しいと思っています。情報。MySQLのジョイント・キー= id1とフォージン・キー= id2

私は私が返すことを期待するときには、以下の「fAttribute」2の と20

id fAttribute fProduct 
19  2  2967 
48  2  2923 
50  2  3008 
51  20  3008 
52  2  2295 
53  20  2295 

マイなステートメントが0の結果を生成したところ、以下の表から取り戻すために「fProduct」の記録をしようとしていますfProduct's 2295および3008.

SELECT fProduct 
FROM tableName 
WHERE fAttribute = 2 AND fAttribute = 20 
GROUP BY fProduct 

誰でも手助けできますか?

INNER JOINを::

SELECT DISTINCT a.fProduct 
FROM MyTable a 
    INNER JOIN MyTable b ON a.fProduct = b.fProduct AND b.fAttribute = 2 
    INNER JOIN MyTable c ON a.fProduct = c.fProduct AND c.fAttribute = 20 

はEXISTS:あなたは内部結合や使用条件をEXISTS使用することができますいずれか

答えて

3

SELECT afproduct 
FROM MyTable a 
WHERE EXISTS (SELECT b.id FROM MyTable b WHERE a.fProduct = b.fProduct AND b.fAttribute = 2) 
    AND EXISTS (SELECT c.id FROM MyTable c WHERE a.fProduct = c.fProduct AND c.fAttribute = 20) 
+0

+1:1分速くなります。 –

+0

Wicked私は最後に "内部結合"オプションを使用しました。乾杯トップの男。 –

+0

@TheoKouzelisうれしい! –

1

Aが参加するには役立つはず:

SELECT distinct a.fProduct 
FROM tableName as a 
join tableName as b on b.product = a.product 
WHERE a.fAttribute = 2 and b.fAttribute = 20 
+1

where節の 'and'の前に' = 2'がありません。 –

+0

ヒントをありがとう、訂正しました。 –

0

あなたの既にGROUP BYを実行している場合は、WHERE句をORまたはINに変更し、HAVING COUNT(fattribute) = 2を追加すると、その両方があることが確認されます。

SELECT fproduct 
FROM tablename 
WHERE fattribute IN (2 , 20) 
GROUP BY fproduct 
HAVING COUNT(fattribute) = 2