我有两个表,一个是包含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";
那么这一切是如何结合在一起的(基于你做这样的事情的假设)?
答案 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
的地方