Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何按照联接表给出的顺序联接_Sql_Postgresql - Fatal编程技术网

Sql 如何按照联接表给出的顺序联接

Sql 如何按照联接表给出的顺序联接,sql,postgresql,Sql,Postgresql,我在postgresql v10数据库中有两个表。 第一个表存储信用卡单据,第二个表存储发票。 我想根据交易日期和交易金额查找每个信用卡交易的相应发票 SELECT cap."slipNr", belege."rechNum", cap."transactionAmountOriginal", belege."rechSum", cap."transactionDate", belege."rechDate" FROM ("2016".cap

我在postgresql v10数据库中有两个表。 第一个表存储信用卡单据,第二个表存储发票。 我想根据交易日期和交易金额查找每个信用卡交易的相应发票

 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