【发布时间】:2021-10-09 09:28:53
【问题描述】:
sql 版本:'5.7.34'
如下:
第一个表名:Invoice
表格发票说明
| column name | type name | extra |
|---|---|---|
| invoicenumber | int(11) | AI PK |
| item_number | char(255) | |
| description | char(255) | |
| qty | decimal(9,2) |
物品表说明:
| column name | type name | extra |
|---|---|---|
| id | int(11) | AI PK |
| item_number | varchar(255) | PK |
| Item_Desc | varchar(255) | |
| Start_Balance | decimal(9,2) |
发票表有这些字段:
ItemNumber ,InvoiceNumber , Item_Desc , Qty
Items 表有这些字段:
ItemNumber , Item_Desc, Start_Balance
Invoice 的 PrimaryKey 是 invoicenumber
Items 表的 PrimaryKey 是 Item_Number
所以基本上我要做的是通过从项目表中获取 Start_balance 来获取剩余数量,然后根据项目编号从发票表中每个项目订单的总数量中减去它。
Invoice 表可以有多个带有项目编号的记录,而 items 表的每一行只有唯一的项目编号。
如何使 select 语句加入两个表以通过加入两个表来获取每个 itemNumber 的剩余数量?
我试过这个:
(SELECT
`items`.`Start_Balance_Qty` - SUM(`invoice`.`QTY`)) AS `currentitembalance`,
`details`.`item_number` AS `itemnumber`,
`details`.`DESCRIPTION` AS `itemdesc`,
`items`.`item_number` AS `item_number`
FROM
(`items`
JOIN `invoice`)
WHERE
(`invoice`.`item_number` = `items`.`item_number`)
GROUP BY `items`.`item_number`)
它工作正常,但问题是它只获取与两个表中的 itemNumber 匹配的发票表上的记录,我需要显示项目表中的所有字段以显示当前余额,换句话说,我希望结果尽管在 invoice 表中匹配了多少条记录,但仍显示 items 表的剩余 qty。
【问题讨论】:
-
你使用的是
MySQL 5.6版本吗?如果您使用group by,则所选列必须在group by或聚合函数的一部分中。请添加表格描述、一些数据和您的预期结果? -
好的,我会尽快添加预期结果