On Nov 21, 2011, at 21:11, David Johnston <pol...@yahoo.com> wrote:

> On Nov 21, 2011, at 17:23, jeffrey <johjeff...@hotmail.com> wrote:
> 
>> Lets say that the primary key column is A.  I am trying to select all
>> the rows with duplicated values in columns B, C, and D.
>> 
>> I am not too experienced in SQL syntax, and I've used the following:
>> select A from table_name where B+C+D in (select B+C+D from table_name
>> group by B+C+D having count(*)>1  )
>> 
>> I'm looking for a better way, since I am just adding the three columns
>> together right now.
>> 
>> Jeffrey
>> 
> 
> Do you really want these to evaluate to equal (B, C, D)?
> 
> (1, 0, 1) = (0, 1, 1); they both sum to 2 but both B and C are unequal
> 
> There is no need to do anything other than list each field individually in 
> both the SELECT and the GROUP BY.
> 
> SELECT B, C, D
> FROM table
> GROUP BY B, C, D
> HAVING count(*) > 1;
> 
> Whatever possessed you to consider that you had to add them to get what you 
> need? (assuming you don't want my examples to be considered equal) Besides 
> the fact it will give you WRONG RESULTS any decent set of GROUP BY examples 
> will show you that you can list/use multiple fields in a grouping query.
> 
> Now, if you truly want the two samples above to evaluate to equal then you do 
> need to do some form of consolidation (like the adding in your example).  
> That, however, would be very unusual.
> 
> David J.
> 
> 

So, in a sub-select you would do:

... WHERE ROW(B, C, D) IN (SELECT B, C, D FROM ... GROUP BY B, C, D)

Note that the word ROW is optional ( but not the parentheses )

David J.



-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

Reply via email to