2011-06-24 124 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

它看起来像你错过了在第一个查询一个右括号(我假定这只是你的问题中一个错字)。乍一看,它看起来不错...你有任何NULL电子邮件值? –

+0

对不起,这是一个错字。所有查询的工​​作,他们只返回1值,当它应该返回4. – fanfavorite

+0

如果你只是运行'SELECT DISTINCT Email FROM Entries'你会得到什么? –

回答

0

WHERE子句过滤出来的结果只是一个。改变了这一点,它的工作原理。

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

同样的结果。只有返回1而不是4 – fanfavorite

+0

@fanfavorite,你可以尝试第二个查询和看到的只是从简单的referAFreind加入结果... – DRapp

相关问题