Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL基于列名删除行_Mysql_Sql - Fatal编程技术网

MySQL基于列名删除行

MySQL基于列名删除行,mysql,sql,Mysql,Sql,表2有一列,其值包含表1中的列名。我想删除表2中表1中实际列名不存在的任何条目。这是一般的想法,但显然不是正确的方法,因此如何才能做到这一点 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_nam

表2有一列,其值包含表1中的列名。我想删除表2中表1中实际列名不存在的任何条目。这是一般的想法,但显然不是正确的方法,因此如何才能做到这一点

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

可能是您无法从所选的同一个表中删除行,因此请尝试使用子查询而不是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 

你能提供一些样本数据和预期结果吗?你有错误:。。你的查询有什么问题?@Barmar这怎么会是重复的?另一个是基于另一个表的内容从一个表中删除,但这个问题是如何基于另一个表的实际列名从一个表中删除。甚至不接近相同的东西。您正在尝试从表2中删除,子查询中的WHERE ID使用表2。这在MySQL中是不允许的,另一个问题解释了如何修复它。谢谢,这看起来很好,比我原来的查询更有意义,我明天会检查它,以确保在粘贴它并将实际值放回时没有引入错误,因为快速测试会给出语法错误。@DonP。。让我知道asnwer是否正确,或者您是否有一些错误。我现在比较清醒,但第2行仍然出现语法错误。同时运行这两个选择,而不运行其余部分,确实会给出预期的ID值,但删除操作没有WHERE。在删除查询中使用联接时,需要指定要从中删除的表:从表2中删除表2…回答已更新。。从表中删除表