SQL中来自Left Join的多行是唯一匹配的行

时间:2018-11-13 19:58:46

标签: sql left-join

我想加入两个观点。我加入了三个要素,日期,病例编号和外科医生编号。每一个都应该只有一个与上一个case out值匹配,但是在我的左连接之后我得到了多行。

这是我的代码:

CREATE VIEW [dbo].[OR]
AS
     SELECT DISTINCT 
         [ID].*,
         [BYSURG].[PREV_PAT_OUT] AS PrevPtOut
     FROM
         [dbo].[OR_LOG_INDEXED] [ID]    
     LEFT JOIN 
         [DBO].[OR_CASE_NUM] BYSURG ON [ID].[SURG_DT] = [BYSURG].[SURG_DT]
                                    AND [ID].[SURGEON_ID] = [BYSURG].[SURGEON_ID]
                                    AND [ID].[CASE_NUM_BY_ROOM] = [BYSURG].[CASE_NUM_BY_ROOM_ADJ]

任何见解都值得赞赏。

谢谢!

M

1 个答案:

答案 0 :(得分:0)

用一个检索所有列的选择块替换您的选择块:

 SELECT  
     *
 FROM
     [dbo].[OR_LOG_INDEXED] [ID]    
 LEFT JOIN 
     [DBO].[OR_CASE_NUM] BYSURG ON [ID].[SURG_DT] = [BYSURG].[SURG_DT]
                                AND [ID].[SURGEON_ID] = [BYSURG].[SURGEON_ID]
                                AND [ID].[CASE_NUM_BY_ROOM] = [BYSURG].[CASE_NUM_BY_ROOM_ADJ]

运行它并查看您的“重复”行-有关它们的内容将不再重复-也许您忘记了在where子句中包含其他条件

在选择块中放置DISTINCT并不是答案-找出有关“重复”行的哪些数据元素不同,然后过滤掉不需要的行