2012-03-09 73 views
0

有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,所以请原谅新手的问题。

+0

原始查询给出错误结果的方式是什么?你能澄清你的问题吗?目前还不清楚你试图取得什么成果。 – 2012-03-09 11:40:35

+0

@MarkBannister感谢您改善问题。我已经对这个问题进行了编辑,希望现在变得清楚 – 2012-03-09 11:50:20

+1

我认为人们在澄清问题时说的是什么,上面的'SELECT'返回什么,你期望它返回什么?你还有哪些DBMS的目标?您不能只选择所有可用的DBMS类型。 – anothershrubery 2012-03-09 11:57:50

回答

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 

你不要做一个SELECT在贷款表,你不需要它在此查询。

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

0

也许问题与连接类型(INNER)有关。例如尝试LEFT JOIN,但Mark有权利:您应该清除您的问题。

+0

我自己只是有关这个问题的很多信息。对不起,相同。 – 2012-03-09 11:53:03

0

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

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 

您可能需要在最后一个加入的标准(也许他们应该是“或”不是“和”等)来播放。