MySQL根据列名删除行

时间:2018-09-04 08:13:21

标签: mysql sql

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'))

1 个答案:

答案 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 
相关问题