2014-04-17 49 views
0

我写了下面的语句来抓取行从examPeriod基于条件相匹配的内部EXAMCENTERWORKINGDAYS行是检索数据Eep.[tpId]=ecwd.[TRAININGPERIODID]使用外连接

查询如下:

SELECT ep.[id] 
FROM [LMS17_ARU_backup_201402080000].[dbo].[examperiod]ep 
RIGHT JOIN 
    (SELECT ecwd.[trainingperiodid] 
    FROM [LMS17_ARU_backup_201402080000].[dbo].[examcenterworkingdays]ecwd 
    WHERE ecwd.[value] <> 0 
    AND ecwd.[trainingperiodid]IS NOT NULL)ecwd ON ep.[tpid] = ecwd.[trainingperiodid] 

麻烦的是, right join之后括号内的select语句只检索95行,当我执行查询时,它返回324行。我希望所有的查询返回95行,也就是我想从[examPeriod]表中获取ep.[id]从95行从嵌套查询时返回ep.[tpId]=ecwd.[TRAININGPERIODID]

很抱歉,如果这是愚蠢的问题

+0

你有多行,因为有每个训练时间ID – Hituptony

+0

多个正品的我想你'RIGHT'加入是复用你的查询结果。对于ep.tdid的一个值,您有TRAININGPERIODID的多个值。尝试使用实际值进行验证... – SoulTrain

回答

-1

为什么你需要一分-QUERY?单个查询不会实现您想要的吗?试试这个:

SELECT ep.[id] 
FROM [LMS17_ARU_backup_201402080000].[dbo].[EXAMCENTERWORKINGDAYS] ecwd 
LEFT JOIN [LMS17_ARU_backup_201402080000].[dbo].[examPeriod] ep 
     ON ep.[tpId] = ecwd.[TRAININGPERIODID] 
WHERE ecwd.[VALUE] <> 0 AND ecwd.[TRAININGPERIODID] IS NOT NULL 

或者这样:

SELECT ep.[id] 
FROM [LMS17_ARU_backup_201402080000].[dbo].[EXAMCENTERWORKINGDAYS] ecwd 
LEFT JOIN [LMS17_ARU_backup_201402080000].[dbo].[examPeriod] ep 
     ON ep.[tpId] = ecwd.[TRAININGPERIODID] 
      AND ecwd.[VALUE] <> 0 
      AND ecwd.[TRAININGPERIODID] IS NOT NULL