如何连接两个不同大小的SQL结果表的结果

时间:2016-03-18 17:05:52

标签: sql join sql-server-2012 inner-join

我有两个查询结果集,两个查询都有一个公共的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

1 个答案:

答案 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