Weirdness with =?

Started by Christopher Kings-Lynnealmost 20 years ago3 messages
#1Christopher Kings-Lynne
chriskl@familyhealth.com.au

I had this code in a script:

UPDATE food_foods SET included=true WHERE verification_status = 'I';
UPDATE food_foods SET included=false WHERE verification_status IS NULL;

I tried replacing it with:

UPDATE food_foods SET included=(verification_status = 'I');

However, that set included to true only where verification_status=I, it
didn't set false at all.

Why doesn't this work?

Chris

#2Martijn van Oosterhout
kleptog@svana.org
In reply to: Christopher Kings-Lynne (#1)
Re: Weirdness with

On Mon, Jan 30, 2006 at 04:44:21PM +0800, Christopher Kings-Lynne wrote:

I had this code in a script:

UPDATE food_foods SET included=true WHERE verification_status = 'I';
UPDATE food_foods SET included=false WHERE verification_status IS NULL;

I tried replacing it with:

UPDATE food_foods SET included=(verification_status = 'I');

(NULL = 'I') is null, not false. It will simply set rows where
verification_status is NULL to NULL also.

Perhaps you mean IS NOT DISTNCT FROM or something similar?

Have a nice day,
--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/

Show quoted text

Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a
tool for doing 5% of the work and then sitting around waiting for someone
else to do the other 95% so you can sue them.

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Christopher Kings-Lynne (#1)
Re: Weirdness with =?

Christopher Kings-Lynne <chriskl@familyhealth.com.au> writes:

I tried replacing it with:
UPDATE food_foods SET included=(verification_status = 'I');
However, that set included to true only where verification_status=I, it
didn't set false at all.

You'd have gotten NULL, not FALSE, at the rows where verification_status
is NULL.

You could try coalesce, or "(verification_status = 'I') IS TRUE", to
get something that returns false instead of null.

regards, tom lane