Mysql 插入。。。选择来自两个或多个不同查询的值时的语法问题
我有一个表名shop\u balance。它有三列(Mysql 插入。。。选择来自两个或多个不同查询的值时的语法问题,mysql,sql,Mysql,Sql,我有一个表名shop\u balance。它有三列(shop\u balance\u id(INT,PK),shop\u balance(DOUBLE),余额日期(date))。 对于商店余额(双)列,我使用两个子查询。 1.在店铺余额表中获取最后一行店铺余额金额店铺余额列。 2.购买一个或多个产品后获取购买金额。 最后我减去它们,得到当前的商店余额 我的问题就在这里 INSERT INTO shop_balance SELECT null, ( (SELECT shop_bala
shop\u balance\u id(INT,PK),
shop\u balance(DOUBLE),
余额日期(date))。
对于商店余额(双)列,我使用两个子查询。
1.在店铺余额表中获取最后一行店铺余额金额店铺余额列。
2.购买一个或多个产品后获取购买金额。
最后我减去它们,得到当前的商店余额
我的问题就在这里
INSERT INTO shop_balance
SELECT null,
(
(SELECT shop_balance FROM shop_balance
WHERE
shop_balance_id=(SELECT MAX(shop_balance_id) FROM shop_balance)
)
-
(
SELECT
SUM(pr_pur_cost_price*quantity) AS net FROM product_purchase_item AS i
LEFT JOIN
product_purchases AS p
ON
p.product_purchase_item_id=i.product_purchase_item_id
WHERE
p.insert_operation=$id
GROUP by
p.insert_operation
)
),curdate();
很明显,这两个子查询是不同的条件,它们之间没有直接关系。上面的
INSERT
查询工作正常。但是使用多个子查询而不使用INSERT。。。选择插入的语法一个值?如果没有,我如何转换为INSERT。。。选择
语法 您必须按照您的计算方式进行计算。我猜触发器可能更好地满足您的需要,但是在插入中执行逻辑就可以了
以下内容稍微简化了您的查询。它消除了对shop\u balance
的双重子查询,将左联接
更改为内部联接(第二个表中有一个条件),并从第二个子查询中消除了分组依据
:
INSERT INTO shop_balance
SELECT null,
((SELECT shop_balance
FROM shop_balance
ORDER BY shop_balance_id desc
LIMIT 1
) -
(SELECT SUM(pr_pur_cost_price*quantity) AS net
FROM product_purchase_item i JOIN
product_purchases p
ON p.product_purchase_item_id=i.product_purchase_item_id
WHERE p.insert_operation=$id
)
), curdate();
您还应该在insert
子句中列出列,并可能删除第一个NULL
(默认情况下,它将设置为NULL)。最后一个curdate()
提示您可能还需要一个自动列来存储插入时间。但是为什么要取消分组方式
。insert_操作不是唯一的,它是不同购买历史记录的跟踪编号。因此,如果我不使用分组方式
。每次购买时间的总和是多少?@coder。查询按where
子句中使用的相同字段分组。sum()。另外,groupby
的出现(对我来说)表明正在生成多个组。但是,如果子查询返回多行,查询将生成错误。