基于子串的多表连接

问题描述 投票:0回答:1

我需要连接 3 个表(Bill、BillPayment 和 BillPaymentLineItem)中的数据。

BillPayment 和 BillPaymentLineItem 有一个简单的链接,因为 BillPayment 上的“Id”字段镜像在 BillPaymentLineItem 上的“BillPaymentId”字段中。

但是,从 Bill 到其他表的唯一链接是使用名为“LinkedTxn”的字段,其中包含 Bill ID 以及一些其他数据。值得庆幸的是,格式是统一的,所以我可以使用 SUBSTRING("LinkedTxn", 12, 5) 来获取 ID。

但是,每当我尝试加入该法案时,我都会收到 LinkedTxn 的不明确列错误。

我当前的查询是:

SELECT Bill.DocNumber, BillPayment.TxnDate, BillPayment.DocNumber, BillPayment.TotalAmt, Amount, BillPaymentID, SUBSTRING("LinkedTxn", 12, 5) AS "BillID"
  FROM BillPaymentLineItem
JOIN BillPayment ON BillPaymentLineItem.BillPaymentId = BillPayment.Id
JOIN Bill ON SUBSTRING(BillPaymentLineItem.LinkedTxn, 12, 5) = Bill.Id

如果我删除第 1 行中对“Bill.DocNumber”的引用以及整个第 4 行,它运行正常。当包含这些内容时,我收到错误“不明确的列'LinkedTxn'”,即使我已经清楚地引用了它旁边的表,并且相同的语法在第 1 行中工作以显示 ID。我也尝试过只使用“BillID”,因为我之前定义了它,但它说它无法识别。

如有任何帮助,我们将不胜感激。

作为参考,我正在使用集成平台来查询 QuickBooks Online。

sql join quickbooks-online
1个回答
0
投票

您可以在列名称之前添加前缀,以根据您的示例指定正确的表。当您在多个表中出现相同的列名时,这是需要的。

我还用表别名缩短了前缀(使用

AS [alias]
关键字)以便于输入,但这是可选的。

SELECT b.DocNumber, 
  p.TxnDate, 
  p.DocNumber, 
  p.TotalAmt, 
  Amount, 
  BillPaymentID, 
  SUBSTRING(li.LinkedTxn, 12, 5) AS BillID -- added prefix
FROM BillPaymentLineItem AS li
JOIN BillPayment AS p 
  ON li.BillPaymentId = p.Id
JOIN Bill AS b 
  ON b.Id = SUBSTRING(li.LinkedTxn, 12, 5)
© www.soinside.com 2019 - 2024. All rights reserved.