使用SQL问题删除

时间:2014-04-11 06:58:48

标签: mysql sql sqlite

问题:编写查询以删除所有无法以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

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'))