先決條件
我的檔案中有兩個表(關于黑膠唱片):
記錄
| ID | 標題 |
|---|---|
| 1 | 標題_1 |
| 2 | 標題_2 |
樣式
| ID | 記錄編號 | 風格 |
|---|---|---|
| 1 | 1 | 藍調 |
| 2 | 1 | 迪斯科 |
| 3 | 2 | 藍調 |
| 4 | 2 | 電子 |
(Styles.style 被存盤為一個整數,但這里為了簡單起見使用了一個字串)
為表樣式設定以下條件:
Styles.recordId = Records.ID 對于每個給定的黑膠唱片
->這是查找與一張特定黑膠唱片相關的所有風格所必需的
因此,存盤了兩種乙烯基:
Title_1 有兩種風格 Blues,Disco
Title_2 有兩種風格 Blues、Electro
題
在我的 SELECT 查詢中,我想找到某種風格的黑膠唱片
查找具有一種風格的標題
如果我想找到一種特定風格的黑膠唱片,這似乎很簡單。
我用:
SELECT Records.Title
FROM Records
JOIN Styles ON Styles.recordId = Records.ID
WHERE Styles.style=Disco
得到想要的結果:
(Title_1)
查找更多樣式的標題
比方說,我想
使用之前的陳述句找到所有樣式(Blues AND Electro)的標題,只是添加另一個陳述句似乎不起作用:
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)
編輯:固定表不呈現
uj5u.com熱心網友回復:
為此,您需要根據您想要的樣式過濾結果集的行,并使用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列的組合recordId和style獨特。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/375466.html
標籤:Python 数据库 sqlite 通过...分组 一对多
