删除重复行mysql

时间:2017-09-15 08:46:15

标签: mysql sql

我有以下查询,但它会删除所有行“info”,而不是仅删除重复的行。我做错了什么?

$db->setQuery("DELETE t1 FROM #__rsform_submission_values t1 
                INNER JOIN #__rsform_submission_values t2 
                WHERE t1.SubmissionValueId > t2.SubmissionValueId AND t1.FieldName = 'info' AND t1.SubmissionId = '".$subId."'");
$db->query();
$query = $db->getQuery(true);

2 个答案:

答案 0 :(得分:0)

假设此查询以某种方式工作,您告诉它删除任何行(名称为' info'以及某些提交值id),为此它可以找到另一行SubmissionValueId低了。

您需要考虑一对行重复的含义。例如。如果他们有相同的FieldName。建议:添加AND t2.FieldName = 'info',如果这就是你的意思。

关于这个查询似乎有更多要改进,但我会从它的本质开始。

答案 1 :(得分:0)

您似乎错过了JOIN条件。我在猜测:

DELETE rsv
    FROM #__rsform_submission_values rsv INNER JOIN 
         #__rsform_submission_values rsv2
         ON rsv2.SubmissionId = rsv.SubmissionId AND
            rsv2.FieldName = rsv.FieldName
    WHERE rsv.SubmissionValueId > rsv2.SubmissionValueId AND
          rsv.FieldName = 'info' AND rs1.SubmissionId = ?;

您应该学习使用参数化查询,而不是使用查询字符串。这就是我用?替换id值的原因。