2013-11-15 78 views
1

我有两个表格,一个是包含ID和点的'点'。另一个表是'名称',包含ID,Forename和Surname。在SQL中使用两个SELECT语句?

我正在尝试搜索带有姓氏安妮和布朗姓氏的人得分的总数。

我需要加入吗?如果是这样,这是正确的吗?

SELECT Name.Forename, Name.Surname 
    FROM Name 
    FULL OUTER JOIN Points 
    ON Name.ID=Points.ID 
    ORDER BY Name.Forename; 

但是,我也有加分,所以我将不得不使用:

SELECT SUM (`points`) FROM Points 

然后还有的WHERE语句,以便它仅仅查找这个名字的人:

WHERE `Forename`="Anne" OR `Surname`="Brown"; 

那么这一切是如何结合在一起的(基于假设你做了这样的事情)?

回答

1

因此,首先,你的回答:

select sum(points) as Points 
from 
Points 
inner join Name on Name.ID = Points.ID 
where 
Name.Forename ='Anne' and Name.SurName='Brown' 

其次,FULL连接是坏的,因为他们把所有的值从两组即使是那些没有火柴。如果您只想返回符合条件的值(A & B),则必须使用INNER JOIN。第二,这里是MySQL reference documentation on SQL statement syntax。请考虑阅读并至少熟悉JOIN,聚合(包括GROUP BY和HAVING),WHERE子句,UNION,一些提供的基本功能以及可能的子查询等基础知识。在这些方面拥有良好的基础可以让您通过大多数MySQL查询的99%。

5
SELECT Name.ID, Forename, Surname, SUM(Points) 
FROM Name 
INNER JOIN Points ON Name.ID = Points.ID 
/* Optional WHERE clause: 
WHERE Name.ForeName = 'Anne' AND Name.Surname='Brown' 
*/ 
GROUP BY Name.ID, Name.Forename, Name.Surname 
0

你可以用子查询这样写。

SELECT Name.Forename, Name.Surname, Name.ID, 
(SELECT SUM (`points`) FROM Points where Points.ID = Name.ID) as total_points 
    FROM Name ORDER BY Name.Forename; 

但是,我想指出,看起来您的表格链接不正确。我不能完全确定没有看到表格,但我想它应该在哪里points.userid = name.id