【发布时间】:2021-03-24 13:57:14
【问题描述】:
我在一个 mysql 数据库上有三个表:
| pieces | line_up | instrument |
--------------------------------------------
| id_piece | piece_id | id_instrument |
| title | instrument_id | instrument |
现在我想要实现的是:我想查询那些其 line_up 完全由列表中给出的乐器组成的片段,而不是一个少一个。 此 sql 查询将结果减少到仅由 2 种乐器演奏的曲目,但它包括独奏
SELECT id_piece, title FROM pieces WHERE
(SELECT COUNT(*) FROM line_up WHERE line_up.piece_id = pieces.id_piece)
=
(SELECT COUNT(*) FROM line_up
INNER JOIN instruments ON instruments.id_instrument = line_up.instrument_id
WHERE line_up.piece_id = pieces.id_piece
AND instruments.instrument IN ('guitar', 'drums'));
以这些表格为例:
| pieces | | line_up | | instruments |
----------------------- --------------------------- ------------------------------
| id_piece | title | | piece_id | instrument_id | | id_instrument | instrument |
----------------------- ---------------------------- ------------------------------
| 1 | hello | | 1 | 1 | | 1 | guitar |
| 2 | goodbye | | 1 | 2 | | 2 | drums |
| 3 | goodnight | | 2 | 1 | ------------------------------
------------------------ | 3 | 2 |
----------------------------
吉他和鼓的唯一实际作品,因此我的查询结果应该是1 | hello。
有什么建议?谢谢!
【问题讨论】:
标签: mysql sql inner-join aggregate-functions having-clause