> On 21 Feb 2015, at 12:03, Arup Rakshit <arupraks...@rocketmail.com> wrote:
> 
> On Saturday, February 21, 2015 12:42:03 PM Alban Hertroys wrote:
>> 
>>> On 21 Feb 2015, at 9:34, Arup Rakshit <arupraks...@rocketmail.com> wrote:
>>> 
>>> Select * from Emp 
>>> where (attr1 = val11 and attr2 = val12 and attr3 = val13) or (attr1 = 
>>> val14and attr2 = val15 and attr3 = val16);
>>> 
>>> Now suppose I got (x1, x2, x3) and (y1, y2, y3). Then I need to rewrite my 
>>> query as :
>>> 
>>> Select * from Emp 
>>> where (attr1 = val11 and attr2 = val12 and attr3 = val13) or (attr1 = val14 
>>> and attr2 = val15 and attr3 = val16) or
>>> (attr1 = x1 and attr2 = x2 and attr3 = x3) or (attr1 = y1 and attr2 = y2 
>>> and attr3 = y3);
>>> 
>>> So for each new set I need to add one more `or` conditions. It seems wired. 
>>> 
>>> Any better way to get it done ?
>> 
>> If the number of attributes to compare is always the same, you can write:
>> 
>> select * from Emp where (attr1, attr2, attr3) in ((val11, val12, val13), 
>> (val14, val15, val16), (x1, x2, x3), (y1, y2, y3));
>> 
>> Is that the sort of thing you're after?
>> 
>> Alban Hertroys
> 
> Thanks for the reply, Can the comparisons be done using Array ? I tried, but 
> got some syntax error. 

Why would you want that?

> psql (9.2.7)
> Type "help" for help.
> 
> app_development=# select * from pets where ARRAY[id, animals] IN 
> '{{1,2,3},{4,5,6},{7,8,9}}';
> ERROR:  syntax error at or near "'{{1,2,3},{4,5,6},{7,8,9}}'"
> LINE 1: select * from pets where ARRAY[id, animals] IN '{{1,2,3},{4,...
>                                                       ^
> app_development=# select * from pets where ARRAY[id, animals] IN '{{6, 1}, 
> {5, 1}}';
> ERROR:  syntax error at or near "'{{6, 1}, {5, 1}}'"
> LINE 1: select * from pets where ARRAY[id, animals] IN '{{6, 1}, {5,…

At the very least you will need to put braces around the set in IN.

But even then, you'll have to write the query such that ALL elements in your 
left-hand array are being matched to ALL elements in any of the right-hand 
arrays. Is that possible? Probably, but at this point I feel like I should 
remind you of what you put in your signature.

Something like this is closer to what you need:

select * from pets where ARRAY[id, animals] = ANY('{6, 1}', '{5, 1}');

I'm sure that won't match anything though, as the types are all wrong.

> Debugging is twice as hard as writing the code in the first place. Therefore, 
> if you write the code as cleverly as possible, you are, by definition, not 
> smart enough to debug it.
> 
> --Brian Kernighan

Alban Hertroys
--
If you can't see the forest for the trees,
cut the trees and you'll find there is no forest.



-- 
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