1

我有一个更新查询,它更新 2 个表,其中一个用不同的别名重复。引擎是 MySQL。如果我分别运行这三个查询,它们可以正常工作,但如果我将它们全部放在一个查询中,它就会失败。

这是查询:

UPDATE
    users AS u1,
    users AS u2,
    customer AS c
SET
    u1.`active` = '1',
    u2.`address` = 'something 234',
    c.`status` = '3'
WHERE
    (u1.`user_name` = 'Tomas'
        AND u1.`user_lastname` = 'Smith'
        AND u1.`user_middle` = 'Nikolas')
    AND (u2.`user_type` = '5'
        AND u2.`user_email` = 'an_email@gmail.com'
        AND u2.`register_date` = 'some_date')
    AND c.`id` = '8';

如果我单独运行查询,用户表更新不会更新任何行(没关系),客户只更新一行(也没关系)。

我期待只用一个查询而不是三个查询来完成所有操作。

这三个查询如下所示:

UPDATE users AS u1 SET u1.`active` = '1' WHERE u1.`user_name` = 'Tomas' AND u1.`user_lastname` = 'Smith' AND u1.`user_middle` = 'Nikolas';

UPDATE users AS u2 SET u2.`address` = 'something 234' WHERE u2.`user_type` = '5' AND u2.`user_email` = 'an_email@gmail.com' AND u2.`register_date` = 'some_date';

UPDATE customer AS c SET c.`status` = '3' WHERE c.`id` = '8';

正如我之前向您展示的那样,我希望所有这些都在一个查询中。这些查询之间没有关系,只是我想一次运行所有不同的查询以进行改进。

我不知道这是否可能。

感谢您阅读我的问题。

4

3 回答 3

1

mysql_query类似(已弃用!)或mysqli::query不支持多个语句的函数。

您将需要类似mysqli::multi_query的东西。

于 2013-06-05T14:25:05.893 回答
0

每个查询似乎都有自己的WHERE条件——我不认为像这样将它们组合在一起会起作用,因为所有条件都必须为真才能更新每一行。

此外,我认为这没有提供任何接近足够的性能改进来保证该代码将变得多么不可维护/不合逻辑。我绝对建议将这些保留为单独的查询。

于 2013-06-05T14:02:19.793 回答
0

我认为您无法通过一个查询在多个表中进行更新。一个表中允许的唯一多个更新命令仅比此处多(完全阅读以加快速度)

于 2013-06-05T14:00:42.423 回答