Обсуждение: SQL Joins

Поиск
Список
Период
Сортировка

SQL Joins

От
tjennette@thomasnelson.com (Trace)
Дата:
Can someone please tell me what this previously-written SQL is doing? 
I don't understand how it is structured.  I'm familiar with JOINs such
as this (1 joined table per 1 ON phrase):

FROM t1
LEFT OUTER JOIN t2 ON t1.id = t2.id
LEFT OUTER JOIN t3 ON t2.name = t3.name

But the following SQL is puzzling me.  To which JOINs are the ON
phrases connected?

Any help would be appreciated!  (Feel free to re-format the physical
structure of the lines....as this is the way it came to me!)

Trace'


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.tblCProductClassProductON        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


Re: SQL Joins

От
"steve boyle"
Дата:
Trace, is the second SQL in Postgres?

"Trace" <tjennette@thomasnelson.com> wrote in message
news:56893385.0201081316.25272d8c@posting.google.com...
> Can someone please tell me what this previously-written SQL is doing?
> I don't understand how it is structured.  I'm familiar with JOINs such
> as this (1 joined table per 1 ON phrase):
>
> FROM t1
> LEFT OUTER JOIN t2 ON t1.id = t2.id
> LEFT OUTER JOIN t3 ON t2.name = t3.name
>
> But the following SQL is puzzling me.  To which JOINs are the ON
> phrases connected?
>
> Any help would be appreciated!  (Feel free to re-format the physical
> structure of the lines....as this is the way it came to me!)
>
> Trace'
>
>
> 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




Re: SQL Joins

От
Tom Lane
Дата:
tjennette@thomasnelson.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.tblCProductClassLEFT 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