2015-04-28 97 views
0

我不得不加入表CAMPAIGN和其中包含的值例如作爲WF_ACTIVITY使得CAMPAIGN.CAMPAIGN_KEY = WF_ACTIVITY.PARAMETERS='CAMPAIGN_KEY=' .The WF_ACTIVITY表具有參數列連接表'CAMPAIGN_KEY='字符串從參數列並加入CAMPAIGN_KEY列值CAMPAIGN表。我真的不知道我可以使用哪些字符串函數,或者我如何修剪參數列中的值爲'CAMPAIGN_KEY='並昏迷它的字符串部分。甲骨文使用字符串函數

+0

你想加入的,例如,'CAMPAIGN.CAMPAIGN_KEY'等於'foo'和'WF_ACTIVITY.PARAMETERS'等於'CAMPAIGN_KEY = foo'? –

回答

2

你不需要任何特殊的功能來實現你正在尋找的東西。

設置:

create table CAMPAIGN (
    campaign_id number, 
    campaign_key varchar(100) 
); 

create table WF_ACTIVITY (
    wf_activity_id number, 
    parameters varchar(100) 
); 

insert into CAMPAIGN values (1, 'ROAMING_DATA_FLAT'); 
insert into CAMPAIGN values (2, 'ROAMING_DATA_ROUND'); 

insert into WF_ACTIVITY values (1, 'CAMPAIGN_KEY=ROAMING_DATA_FLAT'); 
insert into WF_ACTIVITY values (2, 'STEP_KEY=START_COLLECTION'); 
insert into WF_ACTIVITY values (3, 'PARAM_KEY=BYPASS_PROVISIONING'); 
insert into WF_ACTIVITY values (4, 'CAMPAIGN_KEY=ROAMING_DATA_ROUND'); 

查詢:

select * 
from CAMPAIGN c 
join WF_ACTIVITY w on 'CAMPAIGN_KEY=' || c.campaign_key = w.parameters 
where w.parameters like 'CAMPAIGN_KEY=%'; 

所有這一切都不會使用字符串連接c.campaign_key之前 「CAMPAIGN_KEY =」 追加。

結果:

CAMPAIGN_ID CAMPAIGN_KEY  WF_ACTIVITY_ID PARAMETERS 
----------- ------------  -------------- ----------- 
1   ROAMING_DATA_FLAT 1    CAMPAIGN_KEY=ROAMING_DATA_FLAT 
2   ROAMING_DATA_ROUND 4    CAMPAIGN_KEY=ROAMING_DATA_ROUND 
+0

我是否需要使用條件?因爲我有成千上萬的記錄,並且Paramaters列沒有編入索引,所以在這種情況下查詢性能會很慢。 – Andrew

+0

@Rahul,不,技術上你不知道。獲取解釋計劃的兩種方式,並使用最佳表現。 –

+0

感謝馬克現在運行良好:) – Andrew

2

正如another answer注意你不需要使用任何字符串函數,但是如果你想要去的,你可能會想用這種方式substr

SELECT * 
FROM CAMPAIGN C 
JOIN WF_ACTIVITY WA ON SUBSTR(WA.PARAMETERS,14) = C.CAMPAIGN_KEY 
-- the where clause is optional 
WHERE SUBSTR(WA.PARAMETERS,0,13) = 'CAMPAIGN_KEY='; 

Sample SQL Fiddle

+0

我需要在哪裏使用條件嗎?因爲我有成千上萬的記錄,並且Paramaters列沒有編入索引,所以在這種情況下查詢性能會很慢。 – Andrew

+0

如果使用這種方法,我想你會希望子字符串包含前13個字符='CAMPAIGN_KEY =',否則如果有其他類似名稱的參數(如'CAMPAIGN_KEYS'或'CAMPAIGN_KEY_LENGTH' )。 –

+0

@MarkLeiber好點,更新了我的答案。 – jpw