Re: SQL Joins

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: tjennette(at)thomasnelson(dot)com (Trace)
Cc: pgsql-sql(at)postgresql(dot)org
Subject: Re: SQL Joins
Date: 2002-01-14 22:01:55
Message-ID: 19527.1011045715@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

tjennette(at)thomasnelson(dot)com (Trace) writes:
> Can someone please tell me what this previously-written SQL is doing?
> I don't understand how it is structured.

Apparently whoever wrote this doesn't believe in parentheses. I'd think
it a lot more readable with parentheses and appropriate indentation,
viz:

FROM
( (eStoreManager.estore_dept_prod LEFT OUTER JOIN eStoreManager.estore_product
ON eStoreManager.estore_dept_prod.sku = eStoreManager.estore_product.sku)
RIGHT OUTER JOIN
(eStoreManager.tblCProductClass LEFT OUTER JOIN eStoreManager.tblCProductClassProduct
ON eStoreManager.tblCProductClass.ProductClassID = eStoreManager.tblCProductClassProduct.ProductClassID)
ON eStoreManager.estore_product.sku = eStoreManager.tblCProductClassProduct.sku)
FULL OUTER JOIN
(eStoreManager.tblCProductClassCreator INNER JOIN eStoreManager.tblCCreator
ON eStoreManager.tblCProductClassCreator.CreatorID = eStoreManager.tblCCreator.CreatorID)
ON eStoreManager.tblCProductClass.ProductClassID = eStoreManager.tblCProductClassCreator.ProductClassID

BTW, since Postgres doesn't have schemas you'd need to lose the
"eStoreManager." prefixes, which aren't doing anything for readability
here either:

FROM
( (estore_dept_prod LEFT OUTER JOIN estore_product
ON estore_dept_prod.sku = estore_product.sku)
RIGHT OUTER JOIN
(tblCProductClass LEFT OUTER JOIN tblCProductClassProduct
ON tblCProductClass.ProductClassID = tblCProductClassProduct.ProductClassID)
ON estore_product.sku = tblCProductClassProduct.sku)
FULL OUTER JOIN
(tblCProductClassCreator INNER JOIN tblCCreator
ON tblCProductClassCreator.CreatorID = tblCCreator.CreatorID)
ON tblCProductClass.ProductClassID = tblCProductClassCreator.ProductClassID

Does that help any?

If you're wondering how I knew where to put the parentheses, it's
because there's no place else they could go and still have a
syntactically valid statement. So I suppose the author felt they
were unnecessary. But I think it's more readable with 'em.

regards, tom lane

In response to

  • SQL Joins at 2002-01-08 21:16:28 from Trace

Browse pgsql-sql by date

  From Date Subject
Next Message Jeff Eckermann 2002-01-14 22:26:56 Re: Result sets from functions
Previous Message Jason Earl 2002-01-14 21:55:25 Re: CREATE TABLE glitch -fix request for 7.2