表的连接返回不正确的结果

时间:2012-03-09 11:33:30

标签: mysql sql sql-server sql-server-2008 sql-server-2005

有4个sql表:

Listings(Amount, GroupKey, Key, MemberKey),
Loans(Amount, GroupKey, Key, ListingKey),
Members(City, GroupKey, Key)
Groups(GroupRank, Key, MemberKey)

现在,如果想要找出也是列表的贷款,并找到贷款表中成员的成员城市和GroupRank。这里,组表包含有关成员所属的grous的信息。  并执行如下所示的选择操作:

select Listings.Amount, Members.City, Groups.GroupRank
from listings, loans, members, groups
where Listings.Key=Loans.ListingKey and
    Members.Key=Listings.MemberKey and
    Listings.GroupKey=Groups.Key 

上述联接的结果不正确,请指出我哪里出错了。 我也是SQL的新手,所以请原谅新手的问题。

3 个答案:

答案 0 :(得分:1)

注意:以下只是猜测你的问题是什么。像其他人说的那样,明确你的问题。

你想JOINhttp://dev.mysql.com/doc/refman/5.1/de/join.html) 那些表。你写的只是另一种形式的连接,这意味着它具有相同的效果。但是你“加入”了一点太多了。为了使事情更清楚,我们发明了一种语法,使事情更清晰,避免出现这种错误。在上面给出的链接中阅读更多相关信息。

你想要实现的目标可以这样做:

SELECT
Listings.Amount, Members.City, Groups.GroupRank
FROM
Listings
INNER JOIN Groups ON Listings.GroupKey=Groups.Key
INNER JOIN Members ON Members.Key=Listings.MemberKey

您不在Loans表上执行SELECT,在此查询中不需要它。

这是INNER JOIN,它会给你一个结果,表A中的每一行都有一个表B中的相应条目。当不是这种情况时,你必须使用LEFT或RIGHT JOIN。

答案 1 :(得分:0)

可能问题与连接类型(INNER)有关。试试LEFT JOIN,但马克说得对:你应该清楚你的问题。

答案 2 :(得分:0)

我首先会更改您的查询以使用更现代的连接语法,该语法允许外部连接。这个:

select Listings.Amount, Members.City, Groups.GroupRank
from listings
left join loans on Listings.Key=Loans.ListingKey
left join members on Members.Key=Listings.MemberKey
left join groups on Listings.GroupKey=Groups.Key 
    and/or Loans.GroupKey=Groups.Key
    and/or Members.Key=Groups.MemberKey

您可能需要在最后一次加入时使用标准(可能是“或”不是“和”等)。