要在第二个查询SQL

时间:2017-10-04 13:08:27

标签: sql oracle plsql oracle11g

我有一个table1假设ABC,我从一个像'MYname_GKS_50'这样的列中获取o / p。我只希望将该结果的 MYname 部分用作获取不同表的另一列的条件。 假设我从table2.xyz给出columnname = MYname 。这两个查询应该在OracleDB中的单个SQL查询中。 e.g:

  • 表1(col1,col2)

    col2有数据 MYname_GKS_50,MYname_GKS_51,MYname_GKS_52,Ora_10,Ora_11 ......

我希望col2结果仅针对我的搜索条件 MYname_GKS Ora 部分,不需要更改nos。

  • 表2(Col3,col4)

col2的值,即 MYname_GKS Ora 现在应该与table2的col3进行比较。 如果它匹配,它应该给我table2的col4。

任何建议大师!

1 个答案:

答案 0 :(得分:0)

您可以在加入条件中使用like

on t1.col2 like t2.col3||'%'

喜欢这里:

with table1 (col1, col2) as (
    select 1, 'MYname_GKS_50' from dual union all
    select 2, 'MYname_GKS_51' from dual union all
    select 3, 'MYname_GKS_52' from dual union all
    select 4, 'Ora_10'        from dual union all
    select 5, 'Ora_11'        from dual ),
table2 (col3, col4) as (
    select 'MYname_GKS', 'XYZ' from dual union all
    select 'Ora',        'PQR' from dual )
select * 
  from table1 t1 join table2 t2 on t1.col2 like t2.col3||'%'

结果:

      COL1 COL2          COL3       COL4
---------- ------------- ---------- ----
         1 MYname_GKS_50 MYname_GKS XYZ
         2 MYname_GKS_51 MYname_GKS XYZ
         3 MYname_GKS_52 MYname_GKS XYZ
         4 Ora_10        Ora        PQR
         5 Ora_11        Ora        PQR

有一个风险,即table2包含多个匹配的行,例如MYnameMYname_GKS,我不知道在这种情况下你想要什么。