2011-06-24 16 views
0

私がしようとしているのは、彼らが誰かを参照し、その人物がエントリーテーブルにもリストされるたびにエントリーをリストすることです。私が試した3つの異なるクエリは次のとおりです。このMySQLクエリで結果が返されないのはなぜですか?

SELECT a.ID,b.Email FROM Entries a 
INNER JOIN ReferAFriend b ON b.EntryID = a.ID 
INNER JOIN (SELECT DISTINCT Email FROM Entries c ON b.Email = c.Email) 
WHERE a.ID = 47667 

SELECT a.ID,b.Email FROM Entries a 
INNER JOIN ReferAFriend b ON b.EntryID = a.ID AND b.Email IN (SELECT DISTINCT Email FROM Entries) 
WHERE a.ID = 47667 

SELECT a.ID,b.Email FROM Entries a 
INNER JOIN ReferAFriend b ON b.EntryID = a.ID 
WHERE b.Email IN (SELECT DISTINCT Email FROM Entries) AND a.ID = 47667 

3つの結果はすべて1つのエントリです。

私がない場合:

SELECT a.ID,b.Email FROM Entries a 
INNER JOIN ReferAFriend b ON b.EntryID = a.ID 
WHERE a.ID = 47667 

20があるので、私は20のエントリのリストを取得するには、しかし、他のクエリがになっているものであるエントリデータベースにある4のみが存在し、友人を呼びフィルタはこれらの20から、しかしそれは1つの結果を返します。

誰でも正しい方向に向けることができますか?

ありがとうございました。少し再構造化

+0

最初のクエリで閉じ括弧が欠落しているようです(これはあなたの質問の誤植であると仮定しています)。一見、それはokと思われます...あなたはNULLの電子メール値を持っていますか? –

+0

申し訳ありませんが、質問のタイプミスでした。すべてのクエリが機能し、4を返すべきときに1つの値しか返しません。 – fanfavorite

+0

'DISTINCT Email FROM Entries'を実行すると何が得られますか? –

答えて

0

...の結果を表示することができます。それを変更し、それが動作します。

0

...

SELECT DISTINCT STRAIGHT_JOIN 
     e1.ID, 
     rf.Email 
    FROM 
     Entries e1 
     JOIN ReferAFriend rf 
      on e1.ID = rf.EntryID 
      JOIN Entries e2 
       on rf.EMail = e2.EMail 
    where 
     e1.ID = 47667 

あなたが照会および句が一つだけに結果をフィルタリングされたザ・

SELECT DISTINCT 
     e1.ID, 
     rf.Email 
    FROM 
     Entries e1 
     JOIN ReferAFriend rf 
      on e1.ID = rf.EntryID 
    where 
     e1.ID = 47667 
+0

同じ結果です。 4の代わりに1を返すだけです。 – fanfavorite

+0

@fanfavorite、あなたは2番目のクエリを試して、referAFreindによる単純な結合の結果を見てください。 – DRapp

関連する問題