2012-03-14 80 views
1

如何与查询删除这样与子查询DELETE和LIKE

DELETE FROM tbl 
WHERE title LIKE CONCAT((select title from tbl where id = 10),'%') 

该查询返回错误

[错误] 1093行 - 你不能指定目标表 '项' 的更新在 FROM子句

+0

多少值是UR选取[回访..? – Teja 2012-03-14 19:26:31

回答

3
DELETE t 
FROM 
    tableX AS t 
    JOIN 
    (SELECT CONCAT(title, '%') AS titleL 
     FROM tableX 
     WHERE id = 10 
    ) AS ti 
    ON t.title LIKE ti.titleL 
+0

这将工作。 – 2012-03-14 19:45:04

1

我觉得你刚刚从线,以执行一个选择查询插入另一:

DELETE t1 
FROM tbl as t1 
WHERE t1.title LIKE CONCAT((select title from tbl as t2 where t2.id = 10),'%') 
+0

这与OP的查询不起作用的原因不一样。 – 2012-03-14 19:43:32

+0

这不起作用。它会给出完全相同的错误。 – 2012-03-14 19:45:36

+0

更新了查询,忘记了这个事情,这比加入 – ntziolis 2012-03-14 20:00:34

1

你需要的东西,如:

DELETE tbl 
    FROM tbl T1 
     INNER JOIN (SELECT title FROM tbl WHERE id = 10) T2     
    ON T1.title LIKE CONCAT(T2.title, '%') 
+0

有点简单同样的错误... [错误] 1093 - 您无法在FROM子句中指定目标表'条目'进行更新 – mort 2012-03-14 19:41:39

2

一个办法来解决这个错误是其拆分成2个独立的语句。

您可以选择要匹配的标题放入用户定义的变量中,然后执行删除操作。

像这样:

SELECT title 
INTO @title 
FROM tbl 
WHERE id = 10; 

DELETE FROM tbl 
WHERE title LIKE CONCAT(@title,'%'); 
+0

请注意,在MySQL Workbench中需要用于SELECT查询语法如下: SELECT @title:=标题 FROM TBL WHERE ID = 10; – 2012-03-14 20:08:24