简体   繁体   中英

ORACLE SQL JOINS

I have the two tables:

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

output

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

I want to join these two tables on the common columns values , but the other table columns contain extra data. How to overcome this?

table2 column "values" contains data matching to table1 "values"

values
AB
CD
YG

values
JKABHJ
YURRRCD
YGHJJKLJL

You can use like operator in query for matching values in table1 and table2 .

For this query:

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||'%';

Output:

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

But I would recommend you to change a structure to make it more efficient. For example, by adding new table table2_values with column id referenced to table2.id and split 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; 

You should use like operator while joining the two tables. As below

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM