简体   繁体   中英

MySQL Left join - no repeat for right side

I have

<table1>
column1 column2
   1       A
   2       B
   2       C

<table2>
column3 column4
   1       C
   2       D

When I do left join

SELECT table1.column1,
       table1.column2,
       table2.column4
FROM table1
LEFT JOIN table2 ON table1.column1 = table2.column3

I get

column1 column2 column4
   1        A      C
   2        B      D
   2        C      D

Would it be possible to instead somehow get the output as,

column1 column2 column4
   1        A      C
   2        B      
   2        C      D

I want that for every repeated table1.column1, the table2.column4 should come only once and the remaining times it comes out blank.

I have tried various things but haven't succeeded in any.

Try this query:

select t4.column1,t4.column2,case when max2 is null 
then null else t4.column4 end as column4 from
(select table1.column1, table1.column2, table2.column4,t3.* from table1
left join table2 on table1.column1 = table2.column3
left outer join 
(select max2,max1 from
(select max(column2) max2,min(column2) min2,
max(column1) max1,min(column1) min1 from
(select table1.column1, table1.column2, table2.column4 from table1
left join table2 on table1.column1 = table2.column3)t1
group by column4)t2)t3
on table1.column1 = t3.max1 and table1.column2 = t3.max2)t4;

SQL Fiddle

give it a try

select 
    new_t1.column1, new_t1.column2, if(new_t1.get_value, t2.column4,'')
from 
    (select
        t1.*, if(t1_tmp.column2 is null, 1, 0) as get_value
    from table1 t1
        left join table1 t1_tmp on t1.column1 = t1_tmp.column1 and t1.column2 < t1_tmp.column2
    ) as new_t1
    left join table2 t2 on new_t1.column1 = t2.column3

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