mysql - 从 2 个不同的表中选择
问题描述
sql版本:'5.7.34'
如下:
第一个表名:Invoice
表格发票说明
列名 | 类型名称 | 额外的 |
---|---|---|
发票号码 | 整数(11) | 人工智能PK |
项目编号 | 字符(255) | |
描述 | 字符(255) | |
数量 | 十进制(9,2) |
项目表说明:
列名 | 类型名称 | 额外的 |
---|---|---|
ID | 整数(11) | 人工智能PK |
项目编号 | varchar(255) | PK |
Item_Desc | varchar(255) | |
开始平衡 | 十进制(9,2) |
发票表有这些字段:
ItemNumber ,InvoiceNumber , Item_Desc , Qty
项目表有这些字段:
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 匹配的发票表上的记录,我需要显示项目表中的所有字段以显示当前余额,换句话说,我希望结果显示剩余尽管发票表中有多少记录匹配,但项目表的数量。
解决方案
用于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
;
推荐阅读
- python - Pandas 按 id 和年份(日期)分组,但显示所有年份的年份,而不仅仅是 id 中存在的年份?
- testing - Postman 中响应正文日期时间的断言
- javascript - 根据是否包含事件从数组中添加或删除
- typescript - TS 可选和必需的通用联合类型
- react-native - “反应”在哪里?
- ios - 基于 Date() 的秒表 - SwiftUI
- javascript - 将 JS crypto.createHmac 翻译成 Xojo Crypto.HMAC
- javascript - 如何使用超出其范围的变量
- python - 如何修复我的 Django 模型以存储用户输入的多个字符串列表。然后可以在将来作为对象检索哪个?
- angular - Angular 10 - 在模板中将 FormArray 分配给 FormGroup