Re: Question About UNION - Mailing list pgsql-general

From Bill Thoen
Subject Re: Question About UNION
Date
Msg-id 48EE43EA.6030000@gisnet.com
Whole thread Raw
In response to Re: Question About UNION  (Raymond O'Donnell <rod@iol.ie>)
Responses Re: Question About UNION  ("David Wilson" <david.t.wilson@gmail.com>)
List pgsql-general
Raymond O'Donnell wrote:
> On 09/10/2008 17:59, Bill Thoen wrote:
>
>>>> I'm trying to combine two tables, but I only want unique records based
>>>> on the first two columns. Can UNION be used to join three-column tables
>>>> but only include records based on the uniqueness of the first two
>>>> columns? If not, how would I do this with PostgreSQL 8.1?
>>>>
>>>>
>>> How do you decide which records you want? - e.g. given the following
>>> rows...
>>>
>>>   (a, b, c)
>>>   (a, b, d)
>>>
>>> ...how do you decide whether you the one with c or the one with d?
>>>
>>>
>>>
>> The physical order that they appear will take care of that.
>>
>
> Hmmmm....
>
> Leaving that aside, how about SELECTing the columns you want to be
> unique from the two tables, and then JOINing the UNION of those back
> with the UNION of the complete (three-column) tables?
>
No, this won't work. Here's an example of my tables:
Table1
1, 12, A
2, 16, B
8, 6, A
19, 9, C

Table2
1, 13, D
2, 16, B
8, 6, B
12, 5, A

A simple UNION will remove the duplicate row 2, 16, B, but it won't
block row 8, 6, B in table 2 from being included in the output. What I
want is for records in table 1 to take precedence and for the output
records to be unique based only on the first two columns. In other
words, I want this output:
Table3
1, 12, A
2, 16, B
8, 6, A
19, 9, C
1, 13, D
12, 5, A

Trying your suggestion:
create table tmp as
  select col1, col2 from table1
  union
  select col1, col2 from table2;

create table tmp2 as
  select * from table1
  union
  select * from table2;

I'll get:
tmp
1, 12
2, 16
8, 6
19, 9
1, 13
12, 5

tmp2
1, 12, A
2, 16, B
8, 6, A
19, 9, C
1, 13, D
8, 6, B
12, 5, A

I now have two rows with the same first two columns (8,6,A and 8,6,B and
if I try to JOIN tmp and tmp2 I'm going to get duplicates on the 8,6
key. Or am I misunderstanding what you suggested?



pgsql-general by date:

Previous
From: Bill Thoen
Date:
Subject: Re: Question About UNION
Next
From: "David Wilson"
Date:
Subject: Re: Question About UNION