gpt4 book ai didi

php - MYSQL 根据多个不同的列删除

转载 作者:行者123 更新时间:2023-11-28 23:21:53 25 4
gpt4 key购买 nike

这个问题困扰了我好几天了。

所以我们有一个包含所有已处理订单的表格。我们有一个表格,其中包含所有收到的订单。

我们需要有效地交叉引用不断更新的新表中的订单与主表中已经完整的订单,这样我们就不会多次完成相同的订单。

在我们获得一批新订单后,这是我当前运行的查询,试图将其与已完成订单表进行交叉引用:

$sql = "DELETE
FROM
`orders_new`
WHERE
`order` IN (
SELECT DISTINCT
`order`
FROM
`orders_all`
)
AND `name` IN (
SELECT DISTINCT
`name`
FROM
`orders_all`
)
AND `jurisdiction` IN (
SELECT DISTINCT
`jurisdiction`
FROM
`orders_all`
)";

您可能会说,我想从“orders_new”表中删除具有相同ordernamejurisdiction< 的行 已存在于“orders_all”表中。

这是处理此类查询的正确方法吗?

最佳答案

嗯,正确的方法取决于很多因素。但首先,我不喜欢你分成两个表。在那种情况下,我会引入一个列标识状态,它会引用一个包含可能状态的表。这些将是“新的”、“进行中的”、“已完成的”。这样一来,您就可以将一个订单按原样存储为一条记录。但是您的查询可能没问题,但是您应该检查性能。看看:https://sqlperformance.com/2012/12/t-sql-queries/left-anti-semi-join不完全是你的情况,但非常相似。

另一件事:为什么要使用 DISTINCT。这意味着“订单”不是唯一标识符。

根据您的编辑,您可以使用复合键“order”、“name”、“jurisdiction”来识别命令。这真的是 key 吗,整个 key ,只有 key ,所以 Codd 帮了您。如果没有,您可以删除一堆记录。但即便如此,您的查询也会删除所有订单,其订单、名称和管辖权可以在不同记录的表订单中找到。所以你的查询是错误的。

也就是说,您的查询的变体可能是

DELETE order_new
FROM
order_new
INNER JOIN
order_all ON order_all.order = order_new.order
AND order_all.name = order_new.name
AND order_all.jurisdiction = order_new.jurisdiction

但是,真正的问题是您的 ER 模型。

关于php - MYSQL 根据多个不同的列删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41190791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com