Mysql 将一列乘以另一个表中的一列

Mysql 将一列乘以另一个表中的一列,mysql,Mysql,我已经创建了table1,可以通过表单进行更新,所以如果需要更改价格百分比,我可以不需要编辑代码。 我从csv文件导入并创建临时表2。新的临时表2包含物品的成本,所以我需要乘以一个百分比来得到销售价格,因此表1中的价格百分比 percent是table1中的一列,我想按行id选择它,importID是列id,这两个都在table1中,我可以通过表单进行更新。我需要按行id选择未来的增长和多个百分比 我想将临时表2中的价格列乘以永久表1中的百分比列 这是给我一个语法错误的部分 SELECT p

我已经创建了table1,可以通过表单进行更新,所以如果需要更改价格百分比,我可以不需要编辑代码。 我从csv文件导入并创建临时表2。新的临时表2包含物品的成本,所以我需要乘以一个百分比来得到销售价格,因此表1中的价格百分比

percent是table1中的一列,我想按行id选择它,importID是列id,这两个都在table1中,我可以通过表单进行更新。我需要按行id选择未来的增长和多个百分比

我想将临时表2中的价格列乘以永久表1中的百分比列

这是给我一个语法错误的部分

  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
如果你的问题