X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [200.46.204.144]) by svr1.postgresql.org (Postfix) with ESMTP id 482C38B9B1E for ; Mon, 31 Jan 2005 21:06:48 +0000 (GMT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 57267-03 for ; Mon, 31 Jan 2005 21:06:34 +0000 (GMT) Received: from wproxy.gmail.com (wproxy.gmail.com [64.233.184.206]) by svr1.postgresql.org (Postfix) with ESMTP id 9AC0F8B9B17 for ; Mon, 31 Jan 2005 21:06:34 +0000 (GMT) Received: by wproxy.gmail.com with SMTP id 67so655493wri for ; Mon, 31 Jan 2005 13:06:34 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:reply-to:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:references; b=jdt60eyYZ/5FbzQPzhDBxKnCrvv+CoY53gAtos4jQn4bt3FPDU+2fgVXBT9EgUobSzu02wBP5e8RLFvKj1F80AGwNzk9MsmrkUQbJ1fngx0DQXek8JFIOwH/+/EwJqMxBpX4jXqmZ33k+ulKBuzFQ1fIEVw6REPW16AgdiaeKeQ= Received: by 10.54.21.37 with SMTP id 37mr409669wru; Mon, 31 Jan 2005 13:06:34 -0800 (PST) Received: by 10.54.4.71 with HTTP; Mon, 31 Jan 2005 13:06:34 -0800 (PST) Message-ID: <6c21003b0501311306c5f944@mail.gmail.com> Date: Mon, 31 Jan 2005 15:06:34 -0600 From: Don Drake Reply-To: Don Drake To: "Thomas F. O'Connell" Subject: Re: plpgsql functions and NULLs Cc: pgsql-sql@postgresql.org In-Reply-To: <9719e3dd9d6201fc40efcf3a15b82442@sitening.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit References: <6c21003b0501301141234c256b@mail.gmail.com> <9719e3dd9d6201fc40efcf3a15b82442@sitening.com> X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, hits=0.024 tagged_above=0 required=5 tests=AWL, RCVD_BY_IP X-Spam-Level: X-Archive-Number: 200501/315 X-Sequence-Number: 20103 My outer query to get the candidates has an outer join, that works just fine and I get the null OMCR_ID's. It's when I have to query the dimension table (no joins) to see if a row exists with a (sometimes) null OMCR_ID I'm forced to write 2 queries, when I think I should only have to write one. Thanks. -Don On Mon, 31 Jan 2005 14:25:03 -0600, Thomas F. O'Connell wrote: > This sounds like a perfect candidate for a LEFT OUTER JOIN. See: > > http://www.postgresql.org/docs/7.4/static/queries-table- > expressions.html#QUERIES-FROM > > Yours would looks something like: > > SELECT * > FROM ... > LEFT JOIN candidate AS c > ON <...>.omcr_id = c.omcr_id > AND ... > > -tfo > > -- > Thomas F. O'Connell > Co-Founder, Information Architect > Sitening, LLC > http://www.sitening.com/ > 110 30th Avenue North, Suite 6 > Nashville, TN 37203-6320 > 615-260-0005 > > On Jan 30, 2005, at 1:41 PM, Don Drake wrote: > > > OK, I have a function that finds records that changed in a set of > > tables and attempts to insert them into a data warehouse. > > > > There's a large outer loop of candidate rows and I inspect them to see > > if the values really changed before inserting. > > > > My problem is that when I look to see if the row exists in the > > warehouse already, based on some IDs, it fails when an ID is NULL. > > The ID is nullable, so that's not a problem. > > > > But I'm forced to write an IF statement looking for the potential NULL > > and write 2 queries: > > > > IF omcr_id is null > > select * from .... > > WHERE omcr_id is NULL > > AND ... > > ELSE > > select * from .... > > WHERE omcr_id=candidate.omcr_id > > AND .... > > END IF; > > > > IF FOUND > > ... > > > > Is there a way to do the lookup in one statement?? This could get ugly > > quick. I'm using v7.4. > > > > Thanks. > > > > -Don > > > > -- > > Donald Drake > > President > > Drake Consulting > > http://www.drakeconsult.com/ > > 312-560-1574 > > > > ---------------------------(end of > > broadcast)--------------------------- > > TIP 4: Don't 'kill -9' the postmaster > > -- Donald Drake President Drake Consulting http://www.drakeconsult.com/ 312-560-1574