hsz*_*hsz 70 mysql sql delete-row mysql-error-1093 sql-delete
我必须删除guide_category
与guide
table 无关的行(死关系).
这是我想要做的,但它当然不起作用.
DELETE FROM guide_category AS pgc
WHERE pgc.id_guide_category IN (SELECT id_guide_category
FROM guide_category AS gc
LEFT JOIN guide AS g ON g.id_guide = gc.id_guide
WHERE g.title IS NULL)
Run Code Online (Sandbox Code Playgroud)
错误:
您不能在FROM子句中为更新指定目标表'guide_category'
Qua*_*noi 106
由于锁定实现问题,MySQL
不允许使用DELETE
或引用受影响的表UPDATE
.
你需要在JOIN
这里做一个:
DELETE gc.*
FROM guide_category AS gc
LEFT JOIN
guide AS g
ON g.id_guide = gc.id_guide
WHERE g.title IS NULL
Run Code Online (Sandbox Code Playgroud)
或者只是使用NOT IN
:
DELETE
FROM guide_category AS gc
WHERE id_guide NOT IN
(
SELECT id_guide
FROM guide
)
Run Code Online (Sandbox Code Playgroud)
我认为,根据您的描述,以下内容就足够了:
DELETE FROM guide_category
WHERE id_guide NOT IN (SELECT id_guide FROM guide)
Run Code Online (Sandbox Code Playgroud)
我假设,所涉及的表没有参照完整性约束,是吗?
小智 5
尝试这个示例 SQL 脚本以便于理解,
CREATE TABLE TABLE1 (REFNO VARCHAR(10))
CREATE TABLE TABLE2 (REFNO VARCHAR(10))
--TRUNCATE TABLE TABLE1
--TRUNCATE TABLE TABLE2
INSERT INTO TABLE1 SELECT 'TEST_NAME'
INSERT INTO TABLE1 SELECT 'KUMAR'
INSERT INTO TABLE1 SELECT 'SIVA'
INSERT INTO TABLE1 SELECT 'SUSHANT'
INSERT INTO TABLE2 SELECT 'KUMAR'
INSERT INTO TABLE2 SELECT 'SIVA'
INSERT INTO TABLE2 SELECT 'SUSHANT'
SELECT * FROM TABLE1
SELECT * FROM TABLE2
DELETE T1 FROM TABLE1 T1 JOIN TABLE2 T2 ON T1.REFNO = T2.REFNO
Run Code Online (Sandbox Code Playgroud)
您的情况是:
DELETE pgc
FROM guide_category pgc
LEFT JOIN guide g
ON g.id_guide = gc.id_guide
WHERE g.id_guide IS NULL
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
185913 次 |
最近记录: |