Join tables from 2 datasets

谁说我不能喝 提交于 2019-12-12 04:58:46

问题


I have 2 data sets:

1)

    SELECT LocId 
    from map_Sites ms
    inner join map_WaterSystems mw on mw.SiteId = ms.SiteId
    inner join map_Locations ml on mw.SysID = ml.SysID
    where ms.SiteId = 344 and LocId <> 9604

The result of this data set is:

LocId 

9605
9606

Here is the second data set:

    select dl.LocId, dl.ParamID,  dl.alertNumExceed, dl.upperAlarm,  dl.lowerAlarm,  dl.alertOn,  dl.EntryUserID,  dl.ParamOrder 
    from data_LocParams dl where LocId = 9604

The result of this dataset is

LocId   ParamID alertNumExceed  upperAlarm  lowerAlarm  alertOn EntryUserID ParamOrder
9604    187 NULL            NULL            NULL            0   NULL            NULL
9604    3057    NULL            NULL            NULL            0   NULL            NULL
9604    3138    NULL            NULL            NULL            0   NULL            NULL

The final result I am going for is something like this:

LocId   ParamID alertNumExceed  upperAlarm  lowerAlarm  alertOn EntryUserID ParamOrder
9605    187 NULL            NULL            NULL            0   NULL            NULL
9605    3057    NULL            NULL            NULL            0   NULL            NULL
9605    3138    NULL            NULL            NULL            0   NULL            NULL
9606    187 NULL            NULL            NULL            0   NULL            NULL
9606    3057    NULL            NULL            NULL            0   NULL            NULL
9606    3138    NULL            NULL            NULL            0   NULL            NULL

Notice how for each LocId it repeats basedon the ParamID


回答1:


WITH ResultSet1 AS (
  SELECT LocId 
    from map_Sites ms
    inner join map_WaterSystems mw on mw.SiteId = ms.SiteId
    inner join map_Locations ml on mw.SysID = ml.SysID
    where ms.SiteId = 344 and LocId <> 9604
), ResultSet2 AS (
select dl.ParamID,  dl.alertNumExceed, dl.upperAlarm,  dl.lowerAlarm,  dl.alertOn,  dl.EntryUserID,  dl.ParamOrder 
    from data_LocParams dl where LocId = 9604
)
  select
    ResultSet1.LocId, ResultSet2.*
  from ResultSet1
  cross join ResultSet2

In answer to Nate’s comment, you can INSERT using WITH:

WITH ResultSet1 AS (
  SELECT LocId 
    from map_Sites ms
    inner join map_WaterSystems mw on mw.SiteId = ms.SiteId
    inner join map_Locations ml on mw.SysID = ml.SysID
    where ms.SiteId = 344 and LocId <> 9604
), ResultSet2 AS (
select dl.ParamID,  dl.alertNumExceed, dl.upperAlarm,  dl.lowerAlarm,  dl.alertOn,  dl.EntryUserID,  dl.ParamOrder 
    from data_LocParams dl where LocId = 9604
)
  insert into yourTable
  select
    ResultSet1.LocId, ResultSet2.*
  from ResultSet1
  cross join ResultSet2

Or you can write this without WITH:

insert into yourTable
select
  ResultSet1.LocId, ResultSet2.*
  from (
      SELECT LocId 
        from map_Sites ms
        inner join map_WaterSystems mw on mw.SiteId = ms.SiteId
        inner join map_Locations ml on mw.SysID = ml.SysID
        where ms.SiteId = 344 and LocId <> 9604
    ) as ResultSet1
  cross join (
    select dl.ParamID,  dl.alertNumExceed, dl.upperAlarm,  dl.lowerAlarm,  dl.alertOn,  dl.EntryUserID,  dl.ParamOrder 
        from data_LocParams dl where LocId = 9604
) as ResultSet2


来源:https://stackoverflow.com/questions/23554051/join-tables-from-2-datasets

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!