Thread: More efficient INs when comparing two columns

More efficient INs when comparing two columns

From
"Magnus Naeslund(t)"
Date:
I was thinking if this was possible in some way..
I have this table where we have X and Y coordinates, and i need to
select several in one go.

# select * from xy where (x = 1 and y = 2) or (x = 2 and y = 2);

This works but are not so nice looking.
It would be nice to be able to do it like this:

# select * from xy where (x, y) in ((1, 2), (2, 2));

But that doesn't work.
A funny thing is that this works:

# select * from xy where (x, y) = (1, 2);

What's the most efficient way of doing these kind of selects?
A multicol index on x and y is what we currently do and the first select
above...

Regards,
Magnus


Re: More efficient INs when comparing two columns

From
Roman Neuhauser
Date:
# mag@fbab.net / 2005-09-20 20:45:21 +0200:
> I was thinking if this was possible in some way..
> I have this table where we have X and Y coordinates, and i need to
> select several in one go.
>
> # select * from xy where (x = 1 and y = 2) or (x = 2 and y = 2);
>
> This works but are not so nice looking.
> It would be nice to be able to do it like this:
>
> # select * from xy where (x, y) in ((1, 2), (2, 2));
>
> But that doesn't work.
> A funny thing is that this works:
>
> # select * from xy where (x, y) = (1, 2);
>
> What's the most efficient way of doing these kind of selects?

    You'd need to write that as

    (x, y) IN VALUES (1, 2), (2, 2)

    Unfortunately, PostgreSQL's support for table value constructors
    is very weak.

--
How many Vietnam vets does it take to screw in a light bulb?
You don't know, man.  You don't KNOW.
Cause you weren't THERE.             http://bash.org/?255991