按照某些属性的行选择组

问题描述 投票:0回答:1

我有一个 艺术家表id, name 乐队表id, name, genre 乐队艺术家表artistid, bandid 而我正试图查询所有不在摇滚乐队中演出的艺术家(艺术家可以在多个乐队中演奏。 以下查询有效:

SELECT  a.name  
FROM     arIst  a
WHERE   NOT EXISTS
(SELECT  *  
     FROM    arIst  a,  bandMembers bm, band    b   
     WHERE      a.id    =   bm.arIstID  
         AND    bm.id   =   b.id
         AND    b.genre =   “rock");    

但我正试图通过以下方式实现它:

select a.name
from artists a, band b, band-artist ba
where a.id=ba.artistid and b.id=ba.bandid
group by(a.id)
HAVING ??? <--- here I am stuck

如何按组显示组,组中的所有行都遵循某些规则? 这是band.genre != 'rock'

mysql sql
1个回答
2
投票

首先,你需要一个left join,因为一些艺术家可能不在任何乐队。其次,永远不要在from条款中使用逗号。始终使用正确,明确,标准的join语法。

select a.id, a.name  -- in case two artists have the same name
from artists a left join
     band_artist ba
     on a.id = ba.artistid left join
     band b
     on b.id = ba.bandid
group by a.id, a.name
having sum(band.genre = 'rock') = 0;  -- the number of rock bands is 0
© www.soinside.com 2019 - 2024. All rights reserved.