Tsql 从SQL Server中的子查询中获取多个列值返回null
我有以下疑问:Tsql 从SQL Server中的子查询中获取多个列值返回null,tsql,join,subquery,Tsql,Join,Subquery,我有以下疑问: SELECT p.IdS, p.PID, a.Destination, d.DelDate, d.DelTimeE, d.DelTimeL, td.EDateTime, td.ECode, td.[Source] FROM Parcel p LEFT JOIN Party a ON p.IdS = a.IdS LEFT JOIN DateAndTime d
SELECT p.IdS,
p.PID,
a.Destination,
d.DelDate,
d.DelTimeE,
d.DelTimeL,
td.EDateTime,
td.ECode,
td.[Source]
FROM Parcel p
LEFT JOIN Party a ON p.IdS = a.IdS
LEFT JOIN DateAndTime d ON p.IdS = d.IdS
LEFT OUTER JOIN
(SELECT TOP(1) PID,
EDateTime,
ECode,
[Source]
FROM TgData
WHERE ECode='I' ORDER BY ID ASC) AS td
ON p.PID = td.PID
LEFT JOIN Ships s ON p.IdS = s.ShipId
WHERE s.IsFinalized='1' AND s.DComplete='2012-11-30' AND DelDate IS NOT NULL
ORDER BY Destination ASC
但对于某些情况,出于我未知的原因,在数据库的响应中,td列总是“NULL”,即使我知道应该在那里显示一些值。查询在<1秒内执行
我也试着用另一种方法来做:
SELECT p.IdS,
p.PID,
a.Destination,
d.DelDate,
d.DelTimeE,
d.DelTimeL,
(SELECT TOP(1) EDateTime FROM TgData WHERE ECode='I' AND PID=p.PID ORDER BY ID ASC) AS EDateTime
(SELECT TOP(1) ECode FROM TgData WHERE ECode='I' AND PID=p.PID ORDER BY ID ASC) AS ECode
(SELECT TOP(1) [Source] FROM TgData WHERE ECode='I' AND PID=p.PID ORDER BY ID ASC) AS [Source]
FROM Parcel p
LEFT JOIN Party a ON p.IdS = a.IdS
LEFT JOIN DateAndTime d ON p.IdS = d.IdS
LEFT JOIN Ships s ON p.IdS = s.ShipId
WHERE s.IsFinalized='1' AND s.DComplete='2012-11-30' AND DelDate IS NOT NULL
ORDER BY Destination ASC
这将获得正确的数据,但查询需要20秒才能显示470行:P
任何提示都很好,在过去的24小时里,我一直在思考这个问题。试试这个问题
SELECT
p.IdS,
p.PID,
a.Destination,
d.DelDate,
d.DelTimeE,
d.DelTimeL,
EDT.EDateTime AS EDateTime,
EC.ECode AS ECode,
TDL.Source as Source
FROM Parcel p
LEFT JOIN Party a ON p.IdS = a.IdS
LEFT JOIN DateAndTime d ON p.IdS = d.IdS
LEFT JOIN Ships s ON p.IdS = s.ShipId
LEFT JOIN (SELECT PID , TOP(1) EDateTime FROM TgData WHERE ECode='I') as EDT ON EDT.PID = p.PID
LEFT JOIN (SELECT PID , TOP(1) ECode FROM TgData WHERE ECode='I') AS EC ON EC.PID=p.PID
LEFT JOIN (SELECT PID , TOP(1) Source FROM TgData WHERE ECode='I') AS TDL ON TDL.PID=p.PID
WHERE s.IsFinalized='1'
AND s.DComplete='2012-11-30'
AND DelDate IS NOT NULL
ORDER BY Destination ASC
你能在这是衍生查询上发布结构和样本数据吗。使用它,而不是在第二个查询示例中使用的从属子查询。它更快。