SQL多表查询需求:合并结果获取各Deck的ID、名称及卡片数量
合并查询获取Deck信息及对应卡片数量
我有两张SQL表,需要从decks表获取Deck的基础信息,从cards表统计每个Deck的卡片数量,最终得到包含每个Deck的deckid、name和对应卡片数量的结果。
表结构及数据
表1:decks
| deckid | name |
|---|---|
| 1662490522316 | test1 |
| 1662975567468 | test3 |
| 1663153348829 | test4/@/4 |
| 1664289454461 | Science Class EBP Physics 9th |
| 1665037005819 | d/@/dog |
表2:cards
| cardid | noteid | deckid |
|---|---|---|
| 1635883239955 | 1635883239955 | 1664289454461 |
| 1635883239956 | 1635883239955 | 1664289454461 |
| 1635883343194 | 1635883343194 | 1664289454461 |
| 1635883343195 | 1635883343194 | 1664289454461 |
| 1635883382043 | 1635883382043 | 1664289454461 |
| 1635883382044 | 1635883382043 | 1664289454461 |
| 1635883439273 | 1635883439273 | 1664289454461 |
| 1635883439274 | 1635883439273 | 1664289454461 |
| 1635883509673 | 1635883509673 | 1664289454461 |
| 1635883509674 | 1635883509673 | 1664289454461 |
| 1662490587893 | 1662490587892 | 1662490522316 |
| 1662491389237 | 1662491389237 | 1662490522316 |
| 1662491433306 | 1662491433306 | 1662490522316 |
| 1662886491604 | 1662886491600 | 1662490522316 |
| 1662886955205 | 1662886955203 | 1662490522316 |
| 1662965836930 | 1662965836929 | 1662490522316 |
| 1663129181833 | 1663129181832 | 1662975567468 |
| 1663675409308 | 1663675409308 | 1663153348829 |
| 1663675409309 | 1663675409308 | 1663153348829 |
| 1663728830758 | 1663728830757 | 1662975567468 |
| 1664353381308 | 1664353381307 | 1662490522316 |
| 1664358364077 | 1664358364074 | 1662490522316 |
| 1664358364078 | 1664358364075 | 1662490522316 |
| 1665037065057 | 1665037065047 | 1665037005819 |
当前拆分查询情况
目前我通过两条查询分别实现需求:
- 获取所有Deck的ID和名称:
SELECT decks.deckid, decks.name FROM decks
查询结果:
| deckid | name |
|---|---|
| 1662490522316 | test1 |
| 1662975567468 | test3 |
| 1663153348829 | test4/@/4 |
| 1664289454461 | Science Class EBP Physics 9th |
| 1665037005819 | d/@/dog |
- 统计每个Deck的卡片数量:
SELECT cards.deckid, count(cards.deckid) FROM cards GROUP BY cards.deckid
查询结果:
| deckid | count |
|---|---|
| 1662490522316 | 9 |
| 1662975567468 | 2 |
| 1663153348829 | 2 |
| 1664289454461 | 10 |
| 1665037005819 | 1 |
合并查询语句
使用LEFT JOIN关联两张表,同时完成统计,即可得到合并后的结果:
SELECT d.deckid, d.name, COUNT(c.cardid) AS card_count FROM decks d LEFT JOIN cards c ON d.deckid = c.deckid GROUP BY d.deckid, d.name
最终查询结果
执行上述查询后,会返回如下格式的结果:
| deckid | name | card_count |
|---|---|---|
| 1662490522316 | test1 | 9 |
| 1662975567468 | test3 | 2 |
| 1663153348829 | test4/@/4 | 2 |
| 1664289454461 | Science Class EBP Physics 9th | 10 |
| 1665037005819 | d/@/dog | 1 |
内容的提问来源于stack exchange,提问作者Ranjith kumar
相关产品推荐
相关产品推荐

