首页 > 解决方案 > 忽略 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?

标签: sqlpostgresql

解决方案


由于行不同,您将始终获得双 ID。代码和金额列都是唯一的,您还没有告诉 SQL 如何处理这些列。如果您更改它以解决代码和金额列中的差异,Mahesh 显示的组将起作用。

您希望看到 ID 1 的金额是多少?最低的?最高?平均?和?。

要么你必须从查询中删除这 2 列,要么提供一个聚合函数来解决要显示的内容


推荐阅读