我正在尝试加入两个表:一个引用表和一个引用表的历史表 - 我在其中保存了引号和已删除记录中的更新。
我需要的是一个显示所有记录的查询,将它分成3种不同的状态:原始(历史表的第一个值),历史(其他修改的值)和当前(我的报价表中的值)。
我的问题是:当我尝试完全外连接两个表时,当此条目存在历史记录时,不会显示具有当前值(在引用表中但不在历史记录表中的数据)的行。 例如,如果我有一个引用,我将日期从2000年1月1日更新到2/2/2000,我的查询将不会返回2/2/2000的行,只是历史记录1(1/1/2000) )。
我的报价表目前有76个条目,而历史记录有11.当我运行查询时,它只返回81个值 - 历史表包含6个不同的引号。
如何查看查询中的所有值?
SQL语句:
select case isnull(QDH_StatusID,0) when 1 then (case QDH_Date when (select top 1 QDH_Date from quotedeliveryhistory qdh2 where qdh2.QD_RecordID = QD.QD_RecordID order by QDH_Date) then 'Original' else 'History' end)
when 2 then 'Deleted'
when 0 then 'Current'
End As 'Status',
*
from quotedelivery qd full outer join quotedeliveryhistory qdh
on qdh.QD_RecordID = QD.QD_RecordID
有条件的信息:字段QDH_StatusID只存在于历史表中,用于控制记录是更新(1)还是删除(2)。字段QDH_Date保存创建历史记录的日期(也仅存在于历史记录表中)。
答案 0 :(得分:0)
根据您的说法,您获得的结果似乎是正确的,并且查询将从两个表中检索所有值。当您执行full outer join
时,您将从表less
获取符合join
条件的任何行的所有行(因为它们只显示一次),即{{1} }。