使用mysql中的左外连接删除行时出现问题

Jam*_*mes 8 mysql

似乎不能锻炼我在这里做错了什么

SELECT * FROM tbl_imagelabel LEFT OUTER JOIN tbl_image ON tbl_imagelabel.label_id = tbl_image.label_id WHERE tbl_image.label_id is NULL

显示我想要删除的确切行.但如果我将SELECT*FROM更改为DELETE FROM它不起作用

DELETE FROM tbl_imagelabel LEFT OUTER JOIN tbl_image ON tbl_imagelabel.label_id = tbl_image.label_id WHERE tbl_image.label_id is NULL

Pau*_*eno 12

有关MySQL 5+的进一步参考:

DELETE tbl1.* FROM tbl1 LEFT JOIN tbl2 USING(fld) WHERE tbl2.fld IS NULL;
Run Code Online (Sandbox Code Playgroud)

它将使用fld作为连接删除TBL1上的任何孤儿.

GL Paulo Bueno


Nat*_*ler 10

您尝试使用该语法从单个查询中的多个表中删除.尝试更像的东西(这只是一个松散的例子,不是要优化或任何东西):

DELETE FROM tbl_imagelabel
WHERE label_id IN (
    SELECT tbl_imagelabel.label_id 
    FROM tbl_imagelabel 
    LEFT OUTER JOIN tbl_image 
        ON tbl_imagelabel.label_id = tbl_image.label_id 
    WHERE tbl_image.label_id IS NULL
)
Run Code Online (Sandbox Code Playgroud)

  • 当我尝试使用类似的策略使用PHPmyAdmin运行查询时,它给我一条消息,我不能包含我从WHERE子句中删除的表.有什么建议? (3认同)

Bri*_*ntz 6

我相信如果没有显式连接,这会做同样的事情.

DELETE FROM tbl_imagelabel 
WHERE label_id NOT IN (SELECT label_id FROM tbl_image)
Run Code Online (Sandbox Code Playgroud)