我想删除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}
我想删除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}
DELETE FROM banners
WHERE NOT EXISTS (
SELECT *
FROM banners_pp
WHERE banner_id = banners.banner_id
)
看到more细节
DELETE
FROM banners
WHERE NOT EXISTS (SElect 1 from banners_pp
WHERE banners_pp.banner_id = banners.banner_id)
试试这个
DELETE FROM banners
WHERE banner_id NOT IN (
SELECT banner_id
FROM banners_pp
)
DELETE FROM banners b
WHERE NOT EXISTS (
SELECT *
FROM banners_pp bp
WHERE bp.banner_id = b.banner_id
)
使用WHERE banners_pp.banner_id IS NULL
在LEFT JOIN
中,左表(banners
)中右表中没有对应行的行(banners_pp
)存在,但在右表的列中有NULL
。如果在有banner_id = 2
banners_pp
没有进入,但在banners
有banner_id = 2
的条目,在连接表中的对应行可能看起来有点像这样:
| banners.banner_id | banners.foo | banners_pp.banner_id | banners_pp.bar |
| 2 | x | NULL | NULL |
您应该使用外键在未来避免删除孤立行。 – 2010-12-06 12:11:40