📜  MySQL 使用子查询更新 - SQL (1)

📅  最后修改于: 2023-12-03 15:17:47.419000             🧑  作者: Mango

MySQL 使用子查询更新

在MySQL中,我们可以使用子查询来更新表中的数据。子查询是一个在主查询中嵌套的查询语句,用于提供需要更新的数据。

更新单个列

首先,让我们看一下如何使用子查询来更新单个列的值。

UPDATE table_name
SET column_name = (SELECT expression FROM another_table WHERE condition)
WHERE condition;

上述语句中,table_name 是要更新的表的名称,column_name 是要更新的列的名称,another_table 是包含需要的数据的另一个表,expression 是一个子查询,用于获取要更新的值,condition 是一个用于筛选要更新的行的条件。

例如,假设我们有一个名为 products 的表,其中包含 pricename 列,我们希望将每个产品的价格更新为另一个表 prices 中相应产品的价格。

UPDATE products
SET price = (SELECT price FROM prices WHERE products.name = prices.name);

在这个例子中,我们使用了一个子查询来获取 prices 表中相应产品的价格,并将其赋给 products 表中的 price 列。

更新多个列

如果我们需要更新多个列,我们可以使用多个子查询。

UPDATE table_name
SET column1 = (SELECT expression1 FROM another_table WHERE condition),
    column2 = (SELECT expression2 FROM another_table WHERE condition)
WHERE condition;

例如,假设我们在 products 表中还有一个 cost 列,我们希望同时更新 pricecost 列为另一个表 prices 中相应产品的价格。

UPDATE products
SET price = (SELECT price FROM prices WHERE products.name = prices.name),
    cost = (SELECT cost FROM prices WHERE products.name = prices.name);

在这个例子中,我们使用了两个子查询来更新 pricecost 列。

更新多个行

如果我们需要同时更新多个行,我们可以使用 IN 子句来指定一个子查询,该子查询返回需要更新的行的条件。

UPDATE table_name
SET column_name = value
WHERE column_name IN (SELECT column_name FROM another_table WHERE condition);

例如,假设我们有一个名为 products 的表和一个名为 product_categories 的表,我们希望将 products 表中属于特定分类的产品的价格更新为 50

UPDATE products
SET price = 50
WHERE product_id IN (SELECT product_id FROM product_categories WHERE category_id = 1);

在这个例子中,我们使用了一个子查询来获取属于特定分类的产品的 product_id,并将其用于更新 products 表中的价格。

结论

MySQL中的子查询可以让我们在更新表中的数据时候更灵活。我们可以使用子查询来获取需要更新的值,并将其用于更新特定的列或行。利用子查询,我们可以轻松地更新数据,并根据需要进行更复杂的条件筛选。