我有一张机场序列表(AIRPRT_SERIES),如SFO / ATL / GRU或PIT / ATL / GIG / VIX。我想找到这个字段中的所有匹配项(在本例中为ATL / GRU和ATL / GIG),这些匹配项与我有这些航班的另一个表匹配(Hub:ATL Spoke:GIG)。问题是我不知道如何通过或加入我的表来实现这一目标。
这是一个查询,可以完成我想要的一半。问题是两个表中没有匹配的字段(除了我提取它们之外)所以我不知道如何进行连接。
select
*
from LEG_OD leg
inner join myMarkets mkts
on leg.nondir=mkts.nd_arp -- Current condition but not what I want/need
WHERE
REGEXP_SIMILAR(AIRPRT_SERIES , '[A-Z]{3}/('||mkts.SPOKE||'/'||mkts.Hub||'/|'||mkts.Hub||'/'||mkts.Spoke||'/)[A-Z]{3}' )=1
AND
leg.year_month BETWEEN '20160101' AND '20160112'
LEG_OD字段:AIRPRT_SERIES,Passengers,nondir
myMarkets :Hub,Spoke,Distance,nd_arp
我想保留REGEXP_SIMILAR条件,因为这是更大查询的一部分。
答案 0 :(得分:0)
您需要使用STRTOK_SPLIT_TO_TABLE
。使用LEG_OD表,我们可以从airport_series中分离出各个元素。
select
d.* from TABLE (strtok_split_to_table (LEG_OD.<some sort of id column>,LEG_OD.AIRPORT_SERIES, '/')
returns (outkey integer, tokennum integer,toke varchar(3) character set unicode)) as d
order by 1,2
这将为airport_series列中的每个元素提供一行。
如果我正确理解您的数据,您可以加入这些值。