为什么这个查询两次显示相同的结果。
"SELECT * from sony.bsha
inner join sony.frndreq
on sony.frndreq.from='"+email+"' or sony.frndreq.to='"+email+"'";
请告诉我如何停止显示数据两次。
您应该在一些公共字段上加入您的表,然后使用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+"' "
如果您仍然得到双重结果,请使用DISTINCT
or GROUP BY
。如果没有给出您的数据库架构等,很难说更多。
使用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
";
请注意,即使您使用的是内部联接,如果存在冗余数据,它仍然会返回多个“相同”记录。也许如果您检查“电子邮件”,您可能会发现不止一次出现重复的值。使用您获得的重复记录中的值运行查询,看看您得到了什么。
如果电子邮件有重复值(这不是错误),请按照其他用户所说的方式使用 DISTINCT 或 GROUP BY。请记住,要使这些工作正常,您在选择中指定的所有字段都必须相同,而不仅仅是电子邮件。
您应该必须在两个表之间的公共字段上指定条件。那么只有你会得到独特的记录。
"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.id
is Primary Key
inLeft Table
和sony.frndreq.bid
is Foriegn Key
in Right Table
。