以上结果来自下面的第二个联接操作FactPayTransaction
和
分别FactPairingSegments
。
我有两个事实表-FactPairingSegments
和FactPayTransactions
。
我正在对这两个执行如下操作:
SELECT
ps.Bidperiod, ps.PairingNumber,
ps.ActBlockMin, ps.ActCreditMin,
ps.ActDeadHeadMin,
pt.EmployeeKey, pt.TransactionKey, pt.PayCreditMin, pt.Comment
FROM
FactPairingSegments ps,
FactPayTransaction pt
WHERE
ps.Bidperiod = pt.BidPeriod
AND ps.PairingDateKey = pt.PairingDateKey
AND ps.PairingNumber = pt.PairingNumber
AND pt.pairinglegnumber = ps.PairingLegNumber
但是,由于PayTransaction
表中有很多行具有PairingLegNumber = NULL
的行,因此这将仅检索行的子集。
因此,我尝试使用先前查询的并集进行了尝试:
SELECT
ps.Bidperiod, ps.PairingNumber, ps.pairinglegnumber,
pt.PairingNumber, pt.PairingLegNumber,
ps.ActBlockMin, ps.ActCreditMin, ps.ActDeadHeadMin,
pt.EmployeeKey, pt.TransactionKey, pt.PayCreditMin, pt.Comment
FROM
FactPairingSegments ps,
FactPayTransaction pt
WHERE
ps.Bidperiod = pt.BidPeriod
AND ps.PairingDateKey = pt.PairingDateKey
AND ps.PairingNumber = pt.PairingNumber
AND pt.PairingLegNumber IS NULL
但这会导致笛卡尔积。
我遇到的问题是,FactPairingSegments
表中不包含带有NULL PairingLegNumber
的行。这些行仅出现在PayTransactions
中。有什么方法可以避免交叉连接?
任何帮助表示赞赏
答案 0 :(得分:0)
我会尝试以下方法。
SELECT ps.Bidperiod
,ps.PairingNumber
,ps.ActBlockMin
,ps.ActCreditMin
,ps.ActDeadHeadMin
,pt.EmployeeKey
,pt.TransactionKey
,pt.PayCreditMin
,pt.Comment
FROM FactPayTransaction pt
LEFT JOIN FactPairingSegments ps ON ps.Bidperiod = pt.BidPeriod
AND ps.PairingDateKey = pt.PairingDateKey
AND ps.PairingNumber = pt.PairingNumber
AND pt.pairinglegnumber = ps.PairingLegNumber;
事实表通常很奇怪,因为它们像gajilion主键字段一样,您需要将它们全部联接在一起。如果其中一个表缺少数据,则可能需要考虑检查数据,并确保正确设置了键/表/元组。
答案 1 :(得分:0)
谢谢大家的帮助。问题是我错过了配对密钥,这就是为什么结果很奇怪的原因。
答案 2 :(得分:0)
我在加入条件中添加了航空公司密钥:
SELECT ps.Bidperiod
,ps.PairingNumber
,ps.ActBlockMin
,ps.ActCreditMin
,ps.ActDeadHeadMin
,pt.EmployeeKey
,pt.TransactionKey
,pt.PayCreditMin
,pt.Comment
FROM FactPayTransaction pt
LEFT JOIN FactPairingSegments ps ON ps.Bidperiod = pt.BidPeriod
AND ps.PairingDateKey = pt.PairingDateKey
AND ps.PairingNumber = pt.PairingNumber
AND pt.pairinglegnumber = ps.PairingLegNumber
AND pt.Airlinekey=ps.Airlinekey