sql - 忽略 SQL 查询中的重复数据 ID?
问题描述
如何忽略查询 SQL 结果中的重复数据 ID:
在这种情况下,我尝试合并几个表。就像我做的这个方案:
Transactions
----------------------------------------------------------------------------------------
id
user_id
type
amount
invoice_transaction (Relation to invoice)
created_at
updated_at
Users
----------------------------------------------------------------------------------------
id
name
email
phone
birth
address
picture
created_at
updated_at
Vouchers
----------------------------------------------------------------------------------------
id
code
amount
type
created_at
updated_at
Vouchers Transactions
----------------------------------------------------------------------------------------
id
user_id
voucher_id
created_at
updated_at
invoice
----------------------------------------------------------------------------------------
id
order_data
payment_id
last_total
status
created_at
updated_at
Payment
----------------------------------------------------------------------------------------
id
name
tax
created_at
updated_at
这是我提出的一个查询。
SELECT t.id, t.user_id, u1.name, u1.email, v.code, t.amount, t.type, t.created_at, t.invoice_transaction, i.status, p.name,
FROM transactions AS t
INNER JOIN users AS u1 on u1.id = t.user_id
LEFT JOIN vouchers_transaction AS vt on vt.user_id = u1.id
LEFT JOIN vouchers AS v on v.id = vt.voucher_id
LEFT JOIN invoice AS i on i.order_data = t.invoice_transaction
LEFT JOIN payment AS p on p.id = i.payment_id
WHERE t.type = 'buy'
ORDER BY id ASC
在这种情况下,我设法获得了我想要的数据。但是查询的结果包含重复的事务 id 数据,例如:
Result
---------------------------------------------------------------------------------------------------------------------------
id user_id name email code amount type invoice_transaction status payment_name
1 1 John Doe John@mail.com ycqs1 150 buy SCS11DAS success bank
1 1 John Doe John@mail.com ycqs1 150 buy SCS11DAS success bank
2 1 John Doe John@mail.com n1ksa 200 buy SCS12DAS success bank
更新
发生这种情况似乎是因为在交易凭证表中没有与交易表的连接。
例子:
Voucher Transaction
---------------------------------------------------------------------------------------------------------------------------
id user_id voucher_id
1 1 1
2 1 2
3 2 3
然后每笔交易都会根据交易凭证中使用的凭证数量进行复制,无论是使用凭证还是不使用凭证的交易。
我知道最好的方法是更改数据库架构。但是在这种情况下,它仍然可以在这种情况下完成吗?
结果
Result
---------------------------------------------------------------------------------------------------------------------------
id user_id name email code amount type invoice_transaction status payment_name
1 1 John Doe John@mail.com ycqs1 150 buy SCS11DAS success bank
1 1 John Doe John@mail.com sa31a 150 buy SCS11DAS success bank
2 1 John Doe John@mail.com n1ksa 200 buy SCS12DAS success bank
如何忽略重复的交易 ID?
解决方案
由于行不同,您将始终获得双 ID。代码和金额列都是唯一的,您还没有告诉 SQL 如何处理这些列。如果您更改它以解决代码和金额列中的差异,Mahesh 显示的组将起作用。
您希望看到 ID 1 的金额是多少?最低的?最高?平均?和?。
要么你必须从查询中删除这 2 列,要么提供一个聚合函数来解决要显示的内容
推荐阅读
- opentext - 使用 S3 云存储(如 Amazon 或其他)来存储数据,而不是 OpenText Archive Center
- typo3 - Typo3 tt_news disabled date
- pandas - 如何有效地对 pandas 数据帧进行分桶,然后对这些桶执行 groupby 操作?
- time-series - 将每月数据线性插值到 R 中几列的每周水平
- python - Tensorflow 可以计算出积分近似的梯度吗?
- powershell - 将成员添加到 Azure DevOps 团队
- mongodb - Mongodb 区域和分片如何相互关联
- python - 如何将列的计数/总和限制为每月 3 个?
- r - 在 R 中将 EDT 转换为 EST
- java - 当键是不同的类属性时,如何使用 Java 流 API 创建地图?