0
I했습니다 다음과 같은 관계를 가지고 :, 반환 너무 많은 행
사용자 <-1을 : 많은 -> 재생 목록 <-1 : 많은 - > PlaylistItems
새 사용자가 생성되면 자동으로 하나의 빈 재생 목록이 제공됩니다.
재생 목록이 하나 뿐이고 재생 목록이 비어 있어야하는 모든 사용자를 선택하려고합니다.
는 여기에 내가있어 무엇 :
SELECT * FROM Users u
JOIN Playlists p ON UserId = u.Id
WHERE (0 = (SELECT COUNT(*) FROM PlaylistItems WHERE PlaylistId = p.Id) AND (1 = (SELECT COUNT(*) FROM Playlists WHERE UserId = u.Id)))
이 반환 너무 많은 사용자. 그들 중 일부는 분명히 1 + 항목이있는 재생 목록을 가지고 있지만 SQL에 오류가 표시되지 않습니다.
좋아, 내가 고든 리노 프의 솔루션으로 가서 여기에 내가 삭제로 사용할 때 보이는 방법은 다음과 같습니다 일부 및 집계를 조인으로
DELETE from Users
Where Id in (
Select u.id
FROM users u join
playlists pl
on u.id = pl.UserId left outer join
playlistitems pli
on pli.PlaylistId = pl.id
GROUP BY u.id
HAVING count(pl.id) = 1 and
count(pli.id) = 0
)
감사합니다. 이것은 내 해결책과 같은 수의 행을 반환하는 것으로 보이지만, 나는이 하나의 가독성을 더 좋아합니다. :) –
@SeanAnderson. . . 재생 목록에 두 개 이상의 항목이있는 사용자를 어떻게 돌려 보낼 수 있는지 알 수 없습니다. 샘플 데이터가 있다면 SQL 피들을 설정할 수 있습니까? –
귀하의 솔루션이 잘못되었다고 생각하지 않습니다. 내 데이터베이스에는 예상보다 많은 수의 비활성 사용자가 있다고 생각합니다. :) 시간이 지났을 때 나는 당신의 대답을 받아 들일 것입니다. –