postgresql 联接两个表,删除重复行并对两个日期列进行排序[已关闭]

ktca8awb  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(3)|浏览(108)

已关闭。此问题需要details or clarity。它目前不接受回答。
**希望改进此问题?**通过editing this post添加详细信息并阐明问题。

2天前关闭。
Improve this question
我尝试联合两个表,然后为这两个表创建一行信息。
我的代码是:

with cte as (
   select id,
          dt_month_transaction,
          dt_first_transaction,
          transaction_total,
          null as dt_month_redemption,
          null as redemption_total
  from tb_transaction
union 
 select id,
        null as dt_month_transaction,
        null as dt_first_transaction,
        null as transaction_total,
        dt_month_redemption,
        redemption_total
  from tb_redemption
)

字符串
然后,输出为:
| dt月交易|dt第一事务|交易总额|dt_month_reduction|赎回总额| redemption_total |
| --|--|--|--|--| ------------ |
| 2023-04-01 2023-04-01| 2019-10-01 2019-10-01|二十七点五零八||||
| |||2022-04-01 2022-04-01|一百零八点零| 108.0 |
| 2023-04-01 2023-04-01| 2019-10-01 2019-10-01|二十六点三零八||||
| |||2022-04-01 2022-04-01|一百零八点零| 108.0 |
但应该是这样的:
| dt月交易|dt第一事务|交易总额|dt_month_reduction|赎回总额| redemption_total |
| --|--|--|--|--| ------------ |
| 2023-04-01 2023-04-01| 2019-10-01 2019-10-01|二十七点五零八|2022-04-01 2022-04-01|一百零八点零| 108.0 |
| 2023-04-01 2023-04-01| 2019-10-01 2019-10-01|二十六点三零八|2022-04-01 2022-04-01|一百零八点零| 108.0 |
有办法完成我的任务吗?

8e2ybdfx

8e2ybdfx1#

假设id是相关列,并且您只需要两个表中都存在的id值的数据,您可以尝试使用如下连接

select tr.id,
tr.dt_month_transaction,
tr.dt_first_transaction,
tr.transaction_total,
red.dt_month_redemption,
red.redemption_total
from tb_transaction tr
inner join tb_redemption red on tr.id = red.id

字符串

myzjeezk

myzjeezk2#

加入,而不是联合。然后只需从两个表中选择所需的列mix和match。“INNER”连接只从两个表中选择具有匹配键的记录。
“LEFT JOIN”从tb_transactions(A)中提取所有记录,仅从tb_redemption(B)中提取匹配记录。当没有匹配的B记录时,select艾德B列将为空

select
  A.dt_month_transaction,
  A.dt_first_transaction,
  A.transaction_total,
  A.dt_month_redemption,
  A.redemption_total
  B.dt_month_redemption,
  B.redemption_total
from from tb_transaction  A
inner join tb_redemption B on A.keyA = B.keyB

字符串

zbdgwd5y

zbdgwd5y3#

UNION不合并行。
你需要一个FULL [OUTER] JOIN

SELECT id
     , t.dt_month_transaction
     , t.dt_first_transaction
     , t.transaction_total
     , r.dt_month_redemption
     , r.redemption_total
FROM   tb_transaction     t
FULL   JOIN tb_redemption r USING (id)
ORDER  BY id;  -- seems like you want the result ordered this way

字符串
这将保留所有行,即使其他表中没有匹配项。连接条件中的USING子句简化了查询。你总是得到一个id,而不需要COALESCE(t.id, r.id)

相关问题