Join 出于某种原因,多对多选择被分成多行
在多对多关系中,我有两个表通过第三个表连接。要简化: 表A ID-A(内部) 名称(varchar) 分数(数字) 表B ID-B(内部) 名称(varchar) 表AB ID-AB(int) A(外键ID-A) B(外键ID-B) 我想要的是显示B名称和属于给定B的所有a的“分数”值之和。但是,以下代码:Join 出于某种原因,多对多选择被分成多行,join,select,many-to-many,firebird,Join,Select,Many To Many,Firebird,在多对多关系中,我有两个表通过第三个表连接。要简化: 表A ID-A(内部) 名称(varchar) 分数(数字) 表B ID-B(内部) 名称(varchar) 表AB ID-AB(int) A(外键ID-A) B(外键ID-B) 我想要的是显示B名称和属于给定B的所有a的“分数”值之和。但是,以下代码: WITH "Data" AS( SELECT "B."."Name" As "BName", "A"."Name", "Score" FROM "AB" LEFT OUTER JOIN "A
WITH "Data" AS(
SELECT "B."."Name" As "BName", "A"."Name", "Score"
FROM "AB"
LEFT OUTER JOIN "A" ON "AB"."A" = "A"."ID-A"
LEFT OUTER JOIN "B" ON "AB"."B" = "B"."ID-B")
SELECT "BName", SUM("Score") AS "Total"
FROM "Data"
GROUP BY "Name", "Score"
ORDER BY "Total" DESC
结果显示了每个“BName”的几行,“score”在这些行之间被划分为非常随机的增量。例如,如果Johnny的期望结果是12,而April的期望结果是25,则查询可能会显示如下内容:
约翰尼| 7
约翰尼| 3
约翰尼| 2
4月19日
4月5日
四月一日
等等
即使尝试嵌套查询并使用SUM进行另一次选择(“Score”),结果也是一样的。我不确定我做错了什么?从
分组依据
子句中删除得分
:
SELECT BName, SUM(Score) AS Total
FROM Data
GROUP BY BName
ORDER BY Total DESC;
查询的目的是按名称进行汇总,因此在
GROUPBY
子句中应该只显示名称。通过包含分数,您将在输出中获得每个唯一名称/分数组合的记录。好的,我解决了我的问题。事实上,我只能按“名字”分组,但我认为Firebird不允许我这么做。结果只是一个打字错误。哎呀。在组员中没有“分数”,Firebird向我抛出了一个错误,说我不能使用SUM。哎呀!我的错误,修正@eworm似乎不太可能“DBMS”在组中没有“Score”向我抛出一个错误,说我不能使用SUM。鉴于我说的基本相同,你能将我的答案标记为正确吗?可能更有用的是指定键入错误是什么。A包括DBMS(带版本),一个清晰的规范,剪切粘贴和可运行的代码(带有小的代表性输入)(将表格初始化设置为表格格式)和可扩散的(因此是有序的)所需输出。但调试的绝对基础是:显示程序在运行时做了预期的事情(sub)通过说出它是什么来表达,并通过增量输出显示它实际上是这样做的。在添加无法修复的问题代码时,研究(手册和web)。重复,尽量减少工作和错误代码。然后重新询问工作和非工作示例之间的(小)差异。