问题:编写查询以删除所有无法以DVD格式提供的视频。
问题:某些视频可能有多种格式(例如VCR和DVD)但我的查询仍会删除它。因此,在下面的参考中,我仍然应该在我的数据库中使用Matrix和Tights,但它仍然会删除Matrix,因为它也可以在VCR中使用。有什么想法吗?
我的查询(我是否应该使用子查询?)
DELETE FROM video
WHERE VIDEO_ID IN (
SELECT VIDEO_ID
FROM video_format
WHERE FORMAT_ID NOT IN (
SELECT FORMAT_ID
FROM format
WHERE FORMAT_DESC='DVD')) ;
表格:格式
Column format_id, format_desc
1 VCR
2 DVD
表:视频
Columns: video_id, title
1 Matrix
2 Evil
3 Tights
表:video_format
Columns: video_format_id, video_id, format_id
1 1 1
2 1 2
3 2 1
4 3 2
答案 0 :(得分:0)
更好和更快的方法是使用Exists子句。
Delete from Video V where not exists
(Select Video_id from video_formt VF Join Format F on VF.Video_Format_id = F.Format_id
where F.Format_Desc = 'DVD'
and v.video_id = VF.Video_id)
请注意,与使用Not-In构造相比,在这种情况下,存在(或不存在)会更快。
答案 1 :(得分:-1)
DELETE FROM video
WHERE video_id not in (select video_id from video_format where format_id = 2 )
或(id你不知道format_id):
DELETE FROM video
WHERE video_id not in (SELECT video_id FROM video_format WHERE
format_id = (SELECT FORMAT_ID
FROM format
WHERE FORMAT_DESC='DVD'))