Mysql 将一列乘以另一个表中的一列
我已经创建了table1,可以通过表单进行更新,所以如果需要更改价格百分比,我可以不需要编辑代码。 我从csv文件导入并创建临时表2。新的临时表2包含物品的成本,所以我需要乘以一个百分比来得到销售价格,因此表1中的价格百分比 percent是table1中的一列,我想按行id选择它,importID是列id,这两个都在table1中,我可以通过表单进行更新。我需要按行id选择未来的增长和多个百分比 我想将临时表2中的价格列乘以永久表1中的百分比列 这是给我一个语法错误的部分Mysql 将一列乘以另一个表中的一列,mysql,Mysql,我已经创建了table1,可以通过表单进行更新,所以如果需要更改价格百分比,我可以不需要编辑代码。 我从csv文件导入并创建临时表2。新的临时表2包含物品的成本,所以我需要乘以一个百分比来得到销售价格,因此表1中的价格百分比 percent是table1中的一列,我想按行id选择它,importID是列id,这两个都在table1中,我可以通过表单进行更新。我需要按行id选择未来的增长和多个百分比 我想将临时表2中的价格列乘以永久表1中的百分比列 这是给我一个语法错误的部分 SELECT p
SELECT percent FROM my_table1 WHERE importID = 1
这是定价更新代码
UPDATE my_temp_table2
SELECT percent FROM my_table1 WHERE importID = 1
SET Price = (Price * percent);
似乎您正试图“将其插入变量”,而这并不是SQL的实际操作方式 像这样的怎么样:
UPDATE my_temp_table2
SET Price = Price * (SELECT percent FROM my_table1 WHERE importID = 1);
它的性能并不是很好,但对于一次性更新来说,它应该可以正常工作。您似乎在尝试“将其插入变量”,而这并不是SQL的实际操作方式 像这样的怎么样:
UPDATE my_temp_table2
SET Price = Price * (SELECT percent FROM my_table1 WHERE importID = 1);
它的性能并不是很好,但对于一次性更新来说,它应该可以正常工作。您似乎在尝试“将其插入变量”,而这并不是SQL的实际操作方式 像这样的怎么样:
UPDATE my_temp_table2
SET Price = Price * (SELECT percent FROM my_table1 WHERE importID = 1);
它的性能并不是很好,但对于一次性更新来说,它应该可以正常工作。您似乎在尝试“将其插入变量”,而这并不是SQL的实际操作方式 像这样的怎么样:
UPDATE my_temp_table2
SET Price = Price * (SELECT percent FROM my_table1 WHERE importID = 1);
它的性能不是很好,但对于一次性更新来说,它应该可以正常工作。这应该是
UPDATE my_temp_table2
SET Price = Price * (SELECT percent FROM my_table1 WHERE importID = 1);
这将my_temp_表2中的所有价格乘以my_表1中进口1的一个价格
以下是使用变量的备选方案:
SELECT @percent := percent
FROM my_table1 WHERE importID = 1;
UPDATE my_temp_table2
SET Price = Price * @percent;
这应该是
UPDATE my_temp_table2
SET Price = Price * (SELECT percent FROM my_table1 WHERE importID = 1);
这将my_temp_表2中的所有价格乘以my_表1中进口1的一个价格
以下是使用变量的备选方案:
SELECT @percent := percent
FROM my_table1 WHERE importID = 1;
UPDATE my_temp_table2
SET Price = Price * @percent;
这应该是
UPDATE my_temp_table2
SET Price = Price * (SELECT percent FROM my_table1 WHERE importID = 1);
这将my_temp_表2中的所有价格乘以my_表1中进口1的一个价格
以下是使用变量的备选方案:
SELECT @percent := percent
FROM my_table1 WHERE importID = 1;
UPDATE my_temp_table2
SET Price = Price * @percent;
这应该是
UPDATE my_temp_table2
SET Price = Price * (SELECT percent FROM my_table1 WHERE importID = 1);
这将my_temp_表2中的所有价格乘以my_表1中进口1的一个价格
以下是使用变量的备选方案:
SELECT @percent := percent
FROM my_table1 WHERE importID = 1;
UPDATE my_temp_table2
SET Price = Price * @percent;
是否要更新我的临时表2的所有行中的
Price
列?通过从my_table1
返回的单行中的percent
列的值
以下是实现这一目标的一种方法:
UPDATE my_temp_table2 t
CROSS
JOIN ( SELECT p.percent
FROM my_table1 p
WHERE p.importID = 1
ORDER BY p.percent
LIMIT 1
) q
SET t.Price = t.Price * q.percent
如果您的问题表明importID
是我的表1
中的主键(或唯一键
),则可以避免使用内联视图。内联视图查询中LIMIT和ORDER BY子句的目的是确保返回的行不超过1行,并使结果具有确定性。(还有其他方法可以实现这一点,例如MIN()
或MAX()
聚合。)
如果importID
在my_table1
中是唯一的,您可以简化上面的查询,只需引用表而不使用内联视图:
UPDATE my_temp_table2 t
JOIN my_table1 q
ON q.importID = 1
SET t.Price = t.Price * q.percent
在运行更新之前,首先将其作为SELECT语句编写通常是有益的。只需将UPDATE
关键字替换为SELECT。。。从
中,删除SET
子句。例如:
SELECT t.Price AS `old_price`
, q.percent AS `percent`
, t.Price * q.percent AS `new_price`
FROM my_temp_table2 t
JOIN my_table1 q
ON q.importID = 1
通过替换SELECT。。。使用UPDATE
关键字从
,并添加一个SET
子句(将返回新价格的表达式的结果指定给价格列)
请注意,如果在my_table1
中找不到匹配的行,则查询/更新将返回/更新零行
如果不使用联接操作,而是在SET
子句中使用子查询,则子查询返回的NULL
值将导致NULL
值分配给Price
列。是否要通过该值更新my\u temp\u table2
所有行中的Price
列从my_table1
返回的单行中的percent
列的
以下是实现这一目标的一种方法:
UPDATE my_temp_table2 t
CROSS
JOIN ( SELECT p.percent
FROM my_table1 p
WHERE p.importID = 1
ORDER BY p.percent
LIMIT 1
) q
SET t.Price = t.Price * q.percent
如果您的问题指出importID
是my_table1
中的主键(或唯一键),则可以避免使用内联视图。内联视图查询中的LIMIT和ORDER BY子句的目的是确保返回的行不超过1行,并使结果具有确定性。(还有其他方法可以实现这一点,例如MIN()
或MAX()
聚合。)
如果importID
在my_table1
中是唯一的,您可以简化上面的查询,只需引用表而不使用内联视图:
UPDATE my_temp_table2 t
JOIN my_table1 q
ON q.importID = 1
SET t.Price = t.Price * q.percent
在运行更新之前,首先将其作为SELECT语句编写通常是有益的。只需将UPDATE
关键字替换为SELECT…FROM
,然后删除SET
子句即可。例如:
SELECT t.Price AS `old_price`
, q.percent AS `percent`
, t.Price * q.percent AS `new_price`
FROM my_temp_table2 t
JOIN my_table1 q
ON q.importID = 1
将SELECT…FROM
替换为UPDATE
关键字,并添加一个SET
子句(将返回新价格的表达式的结果指定给价格列),将其更改回更新
请注意,如果在my_table1
中找不到匹配的行,则查询/更新将返回/更新零行
如果不使用联接操作,而是在SET
子句中使用子查询,则子查询返回的NULL
值将导致NULL
值分配给Price
列。是否要通过该值更新my\u temp\u table2
所有行中的Price
列从my_table1
返回的单行中的percent
列的
以下是实现这一目标的一种方法:
UPDATE my_temp_table2 t
CROSS
JOIN ( SELECT p.percent
FROM my_table1 p
WHERE p.importID = 1
ORDER BY p.percent
LIMIT 1
) q
SET t.Price = t.Price * q.percent
如果你的问题