问题
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