Medoo |通过内部联接删除

时间:2019-05-24 07:57:10

标签: php mysql medoo

您好,目前我开始使用Medoo,当我检查documentation时,找不到用内部join语句删除记录的方法。

是否有解决方法,可以使用$db->delete()方法删除具有内部联接的记录?

原始SQL查询:

DELETE t1 FROM customers t1 INNER JOIN customers t2 WHERE t1.id < t2.id AND (t1.customer_name = t2.customer_name AND t1.customer_unique_code = t2.customer_unique_code)

到目前为止,我尝试的是使用内部查询,就像在$db->select中所做的那样,但不幸的是,它没有用。

目前我可以与$db->query()一起使用,但这对我来说不是最佳解决方案。

$db->query(
    'DELETE
        t1 FROM '.$customers_db.' t1 INNER JOIN '.$customers_db.' t2 WHERE t1.id < t2.id AND(
            t1.customer_name = t2.customer_name AND t1.customer_unique_code = t2.customer_unique_code)
');

我想知道是否有比这更好的方法。

预先感谢您的建议

1 个答案:

答案 0 :(得分:0)

您可以 在查询中执行此操作,但这样做并不是最好的方法。尝试像这样使用参数化:

$db->query(
    'DELETE t1
        FROM :custdb t1
        INNER JOIN :custdb t2
        WHERE t1.id < t2.id
            AND (
                t1.customer_name = t2.customer_name AND t1.customer_unique_code = t2.customer_unique_code
            )',
    [
        ":custdb" => "customer_DB_name"
    ]
);

我不知道如何进行删除联接(我怀疑是否有可能),但是,如果您在数据库本身中创建所需的视图,则可以在delete语句中选择该视图而不会出现问题。