我有两个查询结果集,两个查询都有一个公共的MessageLogID int。我想内连接并获取更大的tbl1列表,并且只返回与MessageLogID int键上的tbl2行匹配的行。我看到的问题是tbl1.messagelogid无法绑定,因为它无法看到所选的tbl1和tbl2表。
select
(select messageLogId, localName, action, remoteName, localHost, dateTime, message from Messagelog as mm where (message like '%error>%' or message like '% <nak status ="1">%')
) as tbl1,
(SELECT * FROM
(
select substring(m.message, charindex('<MessageID>', m.message)+11, charindex('</MessageID>', m.message)-charindex('<MessageID>', m.message)-11) as SQLmessageID from messagelog m
where message like '%<NCPDPID>1234567</NCPDPID>%' and dateTime > '3/01/2016'
) a JOIN
(
select
substring(r.message, charindex('<RelatesToMessageID>', r.message)+20, charindex('</RelatesToMessageID>', r.message)-charindex('<RelatesToMessageID>', r.message)-20) as SQLRelatesMessageID,
message,
messagelogid from messagelog r
where
dateTime > '3/01/2016' AND
message LIKE ('%<RelatesToMessageID>%</RelatesToMessageID>%')
and message LIKE ('%<Error>%</Error>%')
) b ON b.SQLRelatesMessageID = a.SQLmessageID)
as tbl2
from messagelog where tbl1.messagelogid = tbl2.messagelogid
答案 0 :(得分:2)
我认为你想要这种形式的东西:
with tbl1 as (select ...), tbl2 as (select ...)
select tbl1.*
from
tbl1 inner join tbl2
on tbl2.MessageLogId = tbl1.MessageLogId
您也可以这样做,这更接近您的尝试:
select tbl1.*
from
(select ...) tbl1
inner join
(select ...) tbl2
on tbl2.MessageLogId = tbl1.MessageLogId