在SQL中使用两个SELECT语句?

时间:2013-11-15 20:58:30

标签: mysql sql select sum

我有两个表,一个是包含ID和点的'points'。另一个表是'name',包含ID,Forename和Surname。

我正在努力搜索一个名叫安妮的姓氏总数,以及姓布朗的得分总数。

我必须加入吗?如果是这样,这是正确的吗?

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";

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 JOINS很糟糕,因为它们从两个集合中提取所有值,即使那些没有匹配的值也是如此。如果您只想返回符合条件(A& B)的值,则必须使用INNER JOIN。

第三,这是MySQL reference documentation on SQL statement syntax。请考虑阅读它并至少熟悉JOIN,聚合(包括GROUP BY和HAVING),WHERE子句,UNION,提供的一些基本功能以及子查询等基础知识。拥有良好的基础可以让你获得99%的MySQL查询。

答案 2 :(得分: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

的地方