在一个sql查询输出中包含排除

问题描述 投票:0回答:1

MainAccountID 是一棵树的根,该树可以有许多帐户,每个帐户可以有许多城市节点,每个子城市节点可以有许多城市。

有一个表ConfigFlow.tb,其中每个条目代表特定的流信息,需要使用包含和排除城市Id来创建

ConfigFlow.tb
MainAccountID,IncludeMainCityId,ExcludeMainCityId
1100,100,200
1200,200,300

AccountIds.tb

AccountId,MainAccountID
1,1100
2,1100
3,1200

城市 ID.tb

CityId,MainCityId 
11,100
12,100
13,200
14,300

将 ConfigFlow.tb 与 AccountIds.tb(在 MainAccountID 上)内连接以获取所有子帐户节点,然后与 CityIds.tb 内连接以获取 IncludeMainCityId 下的所有 Cityid

Output only for IncludeMainCityId
1100,100,200,   1,1100,     11,100
1100,100,200,   2,1100,     12,100
1200,200,300,   3,1200,     13,200

有没有办法编写sql查询来同时获取 IncludeMainCityId,ExcludeMainCityId 的输出,像这样?

{ConfigFlow.tb}     {AccountIds.tb}     {IncludeCityIds}    {ExcludeCityIds}
1100,100,200,       1,1100,             11,100               0,0
1100,100,200,       2,1100,             12,100               0,0
1200,200,300,       3,1200,             13,200               0,0
1100,100,200,       1,1100,             0,0                  13,200
1200,200,300,       3,1200,             0,0,                 14,300 

Note:
没有提到所有列名称,但提到了表名称(只是为了避免编写太多有问题的列,但每个逗号分隔都是提到的特定表的一个列)

sql oracle
1个回答
0
投票

您可以通过

JOIN
IncludeMainCityId
表格,然后通过
UNION ALL
再次使用
JOIN
ExcludeMainCityId
表格:

SELECT cf.*,
       a.AccountId,
       ic.CityId AS IncludeCityId,
       ic.MainCityId AS IncludeMainCityId,
       0 AS ExcludeCityId,
       0 AS ExcludeMainCityId
FROM   configflow cf
       INNER JOIN accountids a
       ON cf.mainaccountid = a.mainaccountid
       INNER JOIN cityids ic
       ON cf.IncludeMainCityId = ic.MainCityId
UNION ALL
SELECT cf.*,
       a.AccountId,
       0,
       0,
       ec.CityId,
       ec.MainCityId
FROM   configflow cf
       INNER JOIN accountids a
       ON cf.mainaccountid = a.mainaccountid
       INNER JOIN cityids ec
       ON cf.ExcludeMainCityId = ec.MainCityId;

对于样本数据:

CREATE TABLE ConfigFlow (MainAccountID,IncludeMainCityId,ExcludeMainCityId) AS
SELECT 1100,100,200 FROM DUAL UNION ALL
SELECT 1200,200,300 FROM DUAL;

CREATE TABLE AccountIds (AccountId,MainAccountID) AS
SELECT 1,1100 FROM DUAL UNION ALL
SELECT 2,1100 FROM DUAL UNION ALL
SELECT 3,1200 FROM DUAL;

CREATE TABLE CityIds (CityId,MainCityId) AS
SELECT 11,100 FROM DUAL UNION ALL
SELECT 12,100 FROM DUAL UNION ALL
SELECT 13,200 FROM DUAL UNION ALL
SELECT 14,300 FROM DUAL;

输出:

主帐户ID 包括城市 ID 排除EMANCITYID 账号 包含城市ID 包括城市 ID 排除城市ID 排除EMANCITYID
1100 100 200 1 11 100 0 0
1100 100 200 2 11 100 0 0
1100 100 200 1 12 100 0 0
1100 100 200 2 12 100 0 0
1200 200 300 3 13 200 0 0
1100 100 200 1 0 0 13 200
1100 100 200 2 0 0 13 200
1200 200 300 3 0 0 14 300

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.