sql - 如何合并两个具有一对多关系的表
问题描述
我有两张主要订单和订购产品的表格。
Table 1: ORDERS
"CREATE TABLE IF NOT EXISTS ORDERS("
"id_order INTEGER PRIMARY KEY AUTOINCREMENT,
"o_date TEXT,"
"o_seller TEXT,"
"o_buyer TEXT,"
"o_shipping INTEGER,"
"d_amount INTEGER,"
"d_comm INTEGER,"
"d_netAmount INTEGER)"
Table 2: ORDERED_PRODUCTS
"CREATE TABLE IF NOT EXISTS dispatch_products("
"id_order INTEGER NOT NULL REFERENCES ORDERS(id_order),"
"product_name INTEGER,"
"quantity INTEGER,"
"rate INTEGER)"
我尝试使用以下查询加入这两个表:
SELECT *
FROM ORDERS a
INNER JOIN ORDERED_PRODUCTS b
ON a.id_order = b.id_order
WHERE a.buyer = 'abc'
问题在于表 2 中包含多个产品的条目。我得到的输出如下所示:
order_ID date seller buyer Ship amt comm nAmt Prod Qty Rate
1 A x 5 100 5 115 Scale 10 10
2 B abc 10 100 5 115 pen 5 10
2 B abc 10 100 5 115 paper 10 5
3 C xyz 10 100 5 220 book 5 20
3 C xyz 10 100 5 220 stapl 10 10
expected output:
order_ID date seller buyer Ship amt comm nAmt Prod Qty Rate
1 A x 5 100 5 115 Scale 10 10
2 B abc 10 100 5 115 pen 5 10
Paper 10 5
3 C xyz 10 100 5 220 Book 5 20
Stapl 10 10
解决方案
数据库并不是这样工作的。你得到了你想要的,并且没有重复(所有行都不同)。您正在查看来自订单的数据列并说“哦,数据是重复的”但事实并非如此 - 它是“在上下文中”加入的
想象一下,我只给了您预期输出中的一个示例行:
Paper 10 5
保证我只是复制粘贴。
它来自什么命令?
不知道..你已经失去了上下文,所以它可能来自任何顺序。行是单独的实体,它们独立且不参考任何其他行,作为一组数据。这就是为什么每行都需要显示相同的订单信息。可以制作一个数据库来产生您所要求的预期输出,但在像 sqlite 这样的低端数据库中,它会非常复杂。对我来说更重要的是指出为什么你认为查询会给你的东西和它给你的东西之间存在差异,因为我认为这是真正的问题:查询给了你它应该给你的东西,没有错它; 这更像是对你会得到什么的错误假设
如果您尝试准备使用订单作为某种标题的报告,请在前端应用程序中单独选择它们。选择所有订单,然后逐个(按订单)拉出所有项目详细信息,随时构建报告:
myorders = dbquery("SELECT * FROM ORDERS")
for each(order o in myorders)
print(o.header)
details = dbquery("SELECT * FROM dispatch_products where id_order = ?", o.id)
for each(detail d in details)
print(d.prod, d.qty, d.rate)
推荐阅读
- java - 具有可变输入和线程数的 Java 数组分区
- c++ - 如何通过几个成员函数使用 C++ lamda
- python - 从同名的内部函数访问全局函数
- javascript - 如何将这两者合并为 Javascript 的一个功能?
- java - 如何修复在 docker 中运行的 Azure Cosmos Emulator (Linux) 中的零星读取超时和服务不可用错误?
- android - 如果我知道对象的起始位置,是否可以在没有对象检测器的情况下使用 mediapipe 进行对象跟踪?
- reactjs - 如何在 React 中将路由添加到我的登录页面
- azure-sql-database - Azure SQL 网络防火墙和专用终结点
- r - 如何将数据框中的值与列表中的值匹配,然后将列表附加到 R 中?
- magento - 通过数据库从 Magento 2 导出产品和属性