我有一个项目,我需要在网页上显示这个表格:

结果表(一张票据可以有一个或多个PurcheseOrder)

BILLID DESCRIPTION PO PO_DESCRIPTION HES
1 BILLING1 1001,1002 TEST1,TEST2 ABC,DFG
2 BILLING2 1003 TEST3 HIJ

它是基于4个表创建的:

帐单表格

BILLID DESCRIPTION CREATEDAT
1 BILLING1 2022-01-03
2 BILLING2 2022-01-14

BillingPos Table (it had a relationship with 帐单表格 (many-to-one) and with HesTable (one to many)

ID FK_BILLID FK_HES_ID CREATEDAT
1 1 1 2022-01-03
2 1 2 2022-01-03
3 2 3 2022-01-14

HES表:它与PuracheOrder表有关系

ID HES_ID FK_PO_ID CREATEDAT
1 ABC 1 2022-01-01
2 DFG 2 2022-01-01
3 HIJ 3 2022-01-01

PurcheseOrder表

ID PURCHASEORDER DESCRIPTION CREATEDAT
1 1001 TEST1 2022-01-01
2 1002 TEST2 2022-01-01
3 1003 TEST3 2022-01-01

我知道我必须使用GROUP_CONCAT将POS、DESCRIPTION和HES连接在一行中作为帐单ID,但我弄不清楚

推荐答案

请考虑:

SELECT Billing.BillID, Billing.Description, Group_Concat(PurchaseOrder) AS PO,
Group_Concat(PurchaseOrder.Description) AS PO_Description, Group_Concat(HES_ID) AS HES
FROM Billing INNER JOIN (PurchaseOrder 
INNER JOIN (HES INNER JOIN BillingPos 
ON HES.ID = BillingPos.FK_HES_ID) 
ON PurchaseOrder.ID = HES.FK_PO_ID) 
ON Billing.BillID = BillingPos.FK_BilledID
GROUP BY BillID, Billing.Description;

Mysql相关问答推荐

子查询是否可以按主查询中的列进行分组?

带有值分隔的MySQL分组不起作用

如何进行查询以在两个不同的列中搜索两个不同的数据字符串?

从三个不同的表中生成两列,并使用分组变量计算这些列的比率

Select 分组产品的数量和每个产品的最便宜的价格

按 SQL 删除分组前的重复项

如何显示患者预约中的专业人员姓名?

Golang Gorm 没有创建带有约束的表

当您无法修复表时,如何修复 MySQL不正确的密钥文件错误?

MySQL - 使一对值唯一

PDO:MySQL 服务器已消失

如何在特定数据库中创建表?

Mysql中int(10)的最大大小是多少

Mysql:创建表时将DATETIME的格式设置为'DD-MM-YYYY HH:MM:SS'

Ubuntu 中的 MySQL JDBC jar 文件在哪里?

SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT 列表的表达式 #3 不在 GROUP BY 子句中并且包含非聚合

比较 MySQL 中的日期忽略 DateTime 字段的时间部分

判断多个列的一个值

MySQL DAYOFWEEK() - 我的一周从星期一开始

邮箱地址可接受的字段类型和大小?