从 2 个不同的表中选择
Posted
技术标签:
【中文标题】从 2 个不同的表中选择【英文标题】:Selecting From 2 Different Tables 【发布时间】: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
或聚合函数的一部分中。请添加表格描述、一些数据和您的预期结果?
好的,我会尽快添加预期结果
【参考方案1】:
使用LEFT JOIN
确保在结果集中返回前导表中的所有行,即使它不匹配连接表中的任何记录,在ON
子句而不是WHERE
子句处附加连接条件.当SUM
取值时,将NULL
转换为0
SELECT
a.item_number AS itemnumber,
MAX(a.description) AS itemdesc,
MAX(a.start_balance_qty) - SUM(IFNULL(b.qty, 0))
FROM items a
LEFT JOIN invoice b ON a.item_number = b.item_number
GROUP BY a.item_number
;
【讨论】:
那是直接回答,非常感谢以上是关于从 2 个不同的表中选择的主要内容,如果未能解决你的问题,请参考以下文章