From: | Tony Wasson <ajwasson(at)gmail(dot)com> |
---|---|
To: | Mark Fenbers <Mark(dot)Fenbers(at)noaa(dot)gov> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: default value for select? |
Date: | 2005-05-09 17:30:53 |
Message-ID: | 6d8daee30505091030f5c7828@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
On 5/9/05, Mark Fenbers <Mark(dot)Fenbers(at)noaa(dot)gov> wrote:
> I want to update a column in myTable. The value this column is set to
> depends on a nested select statement which sometimes returns 0 rows instead
> of 1. This is a problem since the column I'm trying to update is set to
> refuse nulls. Here's a sample:
>
> update myTable set myColumn = (Select altColumn from altTable where
> altColumn != 'XXX' limit 1) where myColumn = 'XXX';
>
> MyColumn cannot accept nulls, but sometimes "Select altColumn ..." returns
> 0 rows, and thus, the query fails.
>
> Is there a way to set a default value to be inserted into myColumn if and
> when "select altColumn ..." returns zero rows?
>
> Mark
Mark,
You can work around this by using a CASE statement. In this case, test
for a NULL from your subquery. This is not elegant at all, but it
should do what you are wanting.
update myTable set myColumn = (CASE
WHEN (Select altColumn from altTable where altColumn != 'XXX'
limit 1) IS NULL
THEN 'some default value'
ELSE (Select altColumn from altTable where altColumn != 'XXX' limit 1)
END)
where myColumn = 'XXX';
Hope this helps...
Tony
From | Date | Subject | |
---|---|---|---|
Next Message | Derek Buttineau|Compu-SOLVE | 2005-05-09 18:10:02 | Re: ORDER BY Optimization |
Previous Message | Keith Worthington | 2005-05-09 17:26:55 | Re: default value for select? |