2010-12-06 93 views
2

我想删除banners的任何行,如果没有相应的行banners_pp删除一行

我做的怎么办{doesn't exist}部分?

DELETE banners.* FROM banners 
LEFT JOIN banners_pp 
USING(banner_id) 
WHERE banners_pp.banner_id {doesn't exist} 
+1

您应该使用外键在未来避免删除孤立行。 – 2010-12-06 12:11:40

回答

1
DELETE FROM banners 
WHERE NOT EXISTS (
    SELECT * 
    FROM banners_pp 
    WHERE banner_id = banners.banner_id 
) 

看到more细节

0
DELETE 
FROM banners 
WHERE NOT EXISTS (SElect 1 from banners_pp 
      WHERE banners_pp.banner_id = banners.banner_id) 
0

试试这个

DELETE FROM banners 
WHERE banner_id NOT IN (
SELECT banner_id 
FROM banners_pp 
) 
0
DELETE FROM banners b 
WHERE NOT EXISTS (
    SELECT * 
    FROM banners_pp bp 
    WHERE bp.banner_id = b.banner_id 
) 
1

使用WHERE banners_pp.banner_id IS NULL

LEFT JOIN中,左表(banners)中右表中没有对应行的行(banners_pp)存在,但在右表的列中有NULL。如果在有banner_id = 2banners_pp没有进入,但在bannersbanner_id = 2的条目,在连接表中的对应行可能看起来有点像这样:

| banners.banner_id | banners.foo | banners_pp.banner_id | banners_pp.bar | 
|   2   |  x  |   NULL   |  NULL |