Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 插入。。。选择来自两个或多个不同查询的值时的语法问题_Mysql_Sql - Fatal编程技术网

Mysql 插入。。。选择来自两个或多个不同查询的值时的语法问题

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。它有三列(
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
的出现(对我来说)表明正在生成多个组。但是,如果子查询返回多行,查询将生成错误。