ORACLE SQL JOINS

时间:2017-08-21 06:52:26

标签: sql oracle

我有两张桌子:

TABLE1:

id  name    values
1   john    AB
2   marry   CD
3   sreya   YG

TABLE2:

pid country     values
45  india       JKABHJ
46  usa         YURRRCD
47  uk          YGHJJKLJL

输出

name    values  country
john    AB      india
marry   CD      usa
sreya   YG      uk

我想在公共列values上加入这两个表,但其他表列包含额外数据。如何克服这个?

table2 column" values"包含与table1"值"

匹配的数据
values
AB
CD
YG

values
JKABHJ
YURRRCD
YGHJJKLJL

2 个答案:

答案 0 :(得分:3)

您可以在查询中使用like运算符来匹配valuestable1中的table2

对于此查询:

WITH table1 as (
    select  1 as id, 'john' as name, 'AB' as value from dual union all
    select  2 as id, 'marry' as name, 'CD' as value from dual union all
    select  3 as id, 'sreya' as name, 'YG' as value from dual
),
table2 as (
    select  45 as id, 'india' as country, 'JKABHJ' as value from dual union all
    select  46 as id, 'usa' as country, 'YURRRCD' as value from dual union all
    select  47 as id, 'uk' as country, 'YGHJJKLJL' as value from dual
)
select a.name, a.value, b.country
from table1 a
     join table2 b on b.value like '%'||a.value||'%';

输出:

NAME    VALUE   COUNTRY
john    AB      india
marry   CD      usa
sreya   YG      uk

但我建议您更改结构以提高效率。例如,通过添加引用table2_values的列id的新表table2.id并拆分values

WITH table1 as (
    select  1 as id, 'john' as name, 'AB' as value from dual union all
    select  2 as id, 'marry' as name, 'CD' as value from dual union all
    select  3 as id, 'sreya' as name, 'YG' as value from dual
),
table2 as (
    select  45 as id, 'india' as country from dual union all
    select  46 as id, 'usa' as country from dual union all
    select  47 as id, 'uk' as country from dual
),
table2_values as (
    select  45 as id, 'JK' as value from dual union all
    select  45 as id, 'AB' as value from dual union all
    select  45 as id, 'HJ' as value from dual union all
    select  46 as id, 'YU' as value from dual union all
    select  46 as id, 'RRR' as value from dual union all
    select  46 as id, 'CD' as value from dual union all
    select  47 as id, 'YG' as value from dual union all
    select  47 as id, 'HJ' as value from dual
)
select a.name, a.value, c.country
from table1 a
     join table2_values b on b.value = a.value
     join table2 c on c.id = b.id; 

答案 1 :(得分:0)

加入两个表时应该使用like运算符。 如下

SELECT * FROM TABLE1 JOIN TABLE2 ON TABLE1.values like CONCAT('%',TABLE2.values,'%')