【问题标题】:How to join results of two SQL result tables of different sizes如何连接两个不同大小的SQL结果表的结果
【发布时间】:2016-03-18 17:05:52
【问题描述】:

我有两个来自查询的结果集,它们都有一个共同的 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

【问题讨论】:

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


    【解决方案1】:

    我想你想要这种形式的东西:

    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
    

    【讨论】:

    • 非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2022-12-22
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多