简体   繁体   中英

select only one of the identical rows (specific) between two tables in a union

i have have two identical tables

lets call them t1 and t2

and i want to show data from both of them BUT they may have identical rows (lets say these rows have the same id )

in that case i only want to get the row from table 1 and ignore the one from second table .

so

SELECT column_name(s) FROM t1 UNION SELECT column_name(s) FROM t2 

but how should i handle duplicates ?

you mean this ?

      select column1 , column2 from (
           SELECT column1 , column2 FROM t1 
           UNION 
           SELECT column1 , column2 FROM t2 
       )t
       group by column1

you will have distinct column1 here

If you want to remove duplicates from a SELECT result set, you could use the DISTINCT clause with a sub-query

SELECT DISTINCT * FROM (SELECT value FROM t1 UNION SELECT value FROM t2) AS S

Or better, you might use the UNION DISTINCT syntax:

SELECT value FROM t1 UNION DISTINCT SELECT value FROM t2;

BTW, for UNION the default is UNION DISTINCT (whereas for SELECT , SELECT ALL is the default), so this could be rewritten as:

-- without specifier UNION is implicitly DISTINCT
SELECT value FROM t1 UNION SELECT value FROM t2;

... which is in fact the query you proposed. What was wrong with that? It works with my test set: http://sqlfiddle.com/#!2/d4812/1


Maybe a sqlfeedle with your actual table content might help to provide a better answer.

Here is one way:

SELECT column_name(s)
FROM t1
UNION
SELECT column_name(s)
FROM t2 
where not exists (select 1
                  from t1
                  where t1.col1 = t2.col1 and t1.col2 = t2.col2 and . . .
                 )

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