Table2有一列,其值包含table1中的列名。我想删除table2中不存在table1中实际列名的所有条目。这是一般的想法,但显然不是正确的方法,那么该怎么做?
DELETE FROM table2
WHERE ID IN (SELECT
ID
FROM table2
WHERE FormID = 2
AND FieldName NOT IN (SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'db_name'
AND TABLE_NAME = 'table1'))
答案 0 :(得分:1)
可能无法从所选表中删除行,因此请尝试使用子查询代替IN子句
DELETE table2 FROM table2
INNER JOIN (
SELECT ID
FROM table2
WHERE FormID = 2
AND FieldName NOT IN (
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'db_name'
AND TABLE_NAME = 'table1'
)
) t on t.ID = table2.ID