gpt4 book ai didi

sql - 如何进行分组的多表SQL连接

转载 作者:行者123 更新时间:2023-12-03 19:31:02 25 4
gpt4 key购买 nike

我有三个表,在这里由对象表示,并转换为SQLite表。 CategoryGroup表具有多个Categories,每个Category具有多个Phrases

public class CategoryGroup
{
[PrimaryKey, NotNull]
public int Id { get; set; }
public string Name { get; set; }
public bool Selected { get; set; }
}

public class Category : ICategory
{
[PrimaryKey, NotNull]
public int Id { get; set; }
public int CategoryGroupId { get; set; }
public string Name { get; set; }
public bool Selected { get; set; }
}

public class Phrase : IPhrase
{
public int CategoryId { get; set; }
[PrimaryKey, NotNull]
public string PhraseId { get; set; }
public string English { get; set; }
public string Romaji { get; set; }
public string Kana { get; set; }
public string Kanji { get; set; }
public int Modified { get; set; }
}


我想做的是将这三个表连接起来,并按CategoryGroup将它们分组,然后报告“ Selected”计数。

我创建了此SQL,但是不确定三表联接。

SELECT CG.Id, CG.Name, COUNT(*) AS PhraseCount
FROM CategoryGroup AS CG
FROM Category AS C
JOIN CG.Id = P.CategoryId
JOIN Phrase AS P ON C.Id = P.CategoryId
GROUP BY CG.Id
ORDER BY CG.Name


有人可以给我一些有关如何加入的建议吗?

最佳答案

您的语法有误。您可以从一个表中进行选择,然后根据某些条件将另一表连接起来,以便记录匹配,然后根据链接此表的其他条件将第三个表连接起来。

SELECT CG.Id, CG.Name, COUNT(*) AS PhraseCount
FROM CategoryGroup AS CG
JOIN Category AS C ON C.CategoryGroupId = CG.Id
JOIN Phrase AS P ON P.CategoryId = C.Id
GROUP BY CG.Id
ORDER BY CG.Name;


您可能必须改为 GROUP BY CG.Id, CG.Name。对于SQL Standard,这不是必需的,因为类别组名称在功能上取决于类别组ID,但是某些DBMS对此有要求(因为他们发现确定功能相关性太困难了)。在这方面,我不了解SQLite。

关于sql - 如何进行分组的多表SQL连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41159694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com