【问题标题】:Sqlite - One-To-Many Relationship SELECT QuerySqlite - 一对多关系 SELECT 查询
【发布时间】:2022-01-11 21:00:03
【问题描述】:

先决条件

我的文件中有两张表(关于黑胶唱片):

记录

ID Title
1 Title_1
2 Title_2

样式

ID recordId style
1 1 Blues
2 1 Disco
3 2 Blues
4 2 Electro

(Styles.style 存储为 Integer,但此处为简单起见使用 String)

为表格样式设置以下条件:
Styles.recordId = 每个给定黑胶唱片的 Records.ID

->这是查找与一张特定黑胶唱片相关的所有样式所必需的

因此,存储了两个乙烯基:

Title_1 有布鲁斯、迪斯科两种风格
Title_2 有两种风格 Blues、Electro

问题

在我的 SELECT 查询中,我想查找具有某种风格的黑胶唱片

查找具有一种样式的标题

如果我想找到具有特定风格的黑胶唱片,这似乎很简单。
我用:

SELECT Records.Title
FROM Records
JOIN Styles ON Styles.recordId = Records.ID
WHERE Styles.style=Disco

得到想要的结果:

(Title_1)

查找更多样式的标题

比方说,我想找到所有风格的标题(布鲁斯和电子)
使用之前的语句并仅添加另一个语句似乎不起作用:

SELECT Records.Title
FROM Records
JOIN Styles ON Styles.recordId = Records.ID
WHERE Styles.style=Blues AND Styles.style=Electro

这不起作用,因为 Styles.style 列从不同时包含两种样式。

如何告诉 SQLite 返回所有满足要求的标题?输出应该是

(Title_2)

编辑:固定表格不呈现

【问题讨论】:

    标签: python database sqlite group-by one-to-many


    【解决方案1】:

    为此,您需要过滤结果集中的行以获得所需的样式,并使用 HAVING 子句中的条件进行聚合,即标题两种样式都存在:

    SELECT r.id, r.Title
    FROM Records r JOIN Styles s 
    ON s.recordId = r.ID
    WHERE s.style IN ('Blues', 'Electro')
    GROUP BY r.id, r.Title
    HAVING COUNT(*) = 2;
    

    我假设在表 style 中,recordIdstyle 列的组合是唯一的。

    【讨论】:

    • 非常感谢!我是如此接近,但完全错过了“HAVING”声明。问题解决了!
    猜你喜欢
    • 1970-01-01
    • 2015-11-11
    • 2019-02-02
    • 2014-07-14
    • 2015-03-31
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多