2012-03-14 118 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