-1

为什么这个查询两次显示相同的结果。

"SELECT * from sony.bsha 
inner join sony.frndreq 
on sony.frndreq.from='"+email+"' or sony.frndreq.to='"+email+"'";

请告诉我如何停止显示数据两次。

4

4 回答 4

1

您应该在一些公共字段上加入您的表,然后使用WHERE子句:

SELECT * 
FROM sony.bsha 
INNER JOIN sony.frndreq 
ON sony.bsha.someField = sony.frndreq.someField
WHERE sony.frndreq.from='"+email+"' OR sony.frndreq.to='"+email+"' "

如果您仍然得到双重结果,请使用DISTINCTor GROUP BY。如果没有给出您的数据库架构等,很难说更多。

于 2013-10-02T12:33:03.303 回答
0

使用GROUP BY

"SELECT * 
 from sony.bsha 
      inner join sony.frndreq 
          on sony.frndreq.from='"+email+"' or sony.frndreq.to='"+email+"'
GROUP BY sony.frndreq.from
    ";
于 2013-10-02T12:30:05.833 回答
0

请注意,即使您使用的是内部联接,如果存在冗余数据,它仍然会返回多个“相同”记录。也许如果您检查“电子邮件”,您可能会发现不止一次出现重复的值。使用您获得的重复记录中的值运行查询,看看您得到了什么。

如果电子邮件有重复值(这不是错误),请按照其他用户所说的方式使用 DISTINCT 或 GROUP BY。请记住,要使这些工作正常,您在选择中指定的所有字段都必须相同,而不仅仅是电子邮件。

于 2013-10-02T12:51:13.470 回答
0

您应该必须在两个表之间的公共字段上指定条件。那么只有你会得到独特的记录。

"SELECT * FROM sony.bsha 
INNER JOIN sony.frndreq ON sony.bsha.id = sony.frndreq.bid 
WHERE sony.frndreq.from='"+email+"' OR sony.frndreq.to='"+email+"'";

在上面的 SQL 中,我假设字段为

sony.bsha.id = sony.frndreq.bid

条件 where sony.bsha.idis Primary KeyinLeft Tablesony.frndreq.bidis Foriegn Keyin Right Table

于 2013-10-02T12:38:11.477 回答