Sql 如何按照联接表给出的顺序联接
我在postgresql v10数据库中有两个表。 第一个表存储信用卡单据,第二个表存储发票。 我想根据交易日期和交易金额查找每个信用卡交易的相应发票Sql 如何按照联接表给出的顺序联接,sql,postgresql,Sql,Postgresql,我在postgresql v10数据库中有两个表。 第一个表存储信用卡单据,第二个表存储发票。 我想根据交易日期和交易金额查找每个信用卡交易的相应发票 SELECT cap."slipNr", belege."rechNum", cap."transactionAmountOriginal", belege."rechSum", cap."transactionDate", belege."rechDate" FROM ("2016".cap
SELECT cap."slipNr",
belege."rechNum",
cap."transactionAmountOriginal",
belege."rechSum",
cap."transactionDate",
belege."rechDate"
FROM ("2016".cap
JOIN "2016".belege ON (((cap."transactionDate" = belege."rechDate") AND (cap."transactionAmountOriginal" = belege."rechSum"))))
WHERE ((cap."transactionDate" = belege."rechDate") AND (cap."transactionAmountOriginal" = belege."rechSum"))
ORDER BY cap."slipNr"
在每天有多张具有匹配TransactionMount的发票之前,一切都按预期进行。当然,我可以通过选择DISTINCT ON(cap.slipNr)
来解决这个问题,但是,正如您在屏幕截图上看到的,查询不会对发票表进行排序,而是采用随机匹配的条目。slipNr的第一个对应条目是rechNum 2242,而不是表中实际的第一个条目2236
belege.rechNum有一个上升的索引。“belege”表中的数据是按“rechNum”顺序插入的
当您在上使用
distinct时,需要按
调整顺序以匹配。所以我想你想要:
order by cap.slipNr, belege.rechNum
如果希望最终结果集的顺序不同,请使用子查询或CTE以及另一个orderby
您确实应该在信用卡账单表中存储对发票的引用。如果因为排序错误而将我的付款应用到其他人的发票上,我会非常不高兴。当然,这是正确的解决方案。然而,对于过去的数据,我不能这样做。此外,我想通过减去信用卡交易来计算现金交易谢谢,很简单。我以为我试过了,但一定是弄错了
order by cap.slipNr, belege.rechNum