Aaron Bono wrote:

On 7/13/06, *Joost Kraaijeveld* <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    I have three tables: customers, salesorders and invoices.
    Customers have
    salesorders and salesorders have invoices ( child tables have foreign
    key columns to their parent).

    I want to get a list of all invoices with their customers. This
    what I
    came up with:

    select
    invoices.objectid,
    invoices.invoicenumber,
    invoices.invoicedate,
    (select customer from salesorders where objectid =
    invoices.salesorderobjectid),
    (select customernumber from customers where objectid = (select
    customer from salesorders where objectid =
    invoices.salesorderobjectid)),
    (select lastname from customers where objectid = (select customer
    from salesorders where objectid = invoices.salesorderobjectid))
    from invoices

    Can I do this smarter as the three subselects select the same
customer three times and I would think that 1 time is enough?

SELECT
   invoices.objectid,
   invoices.invoicenumber,
   invoices.invoicedate,
   salesorders.customer,
   customers.customernumber,
   customers.lastname
FROM invoices
INNER JOIN salesorders ON (
   salesorders.objectid = invoices.salesorderobjectid
)
INNER JOIN customers ON (
   customers.objectid = salesorder.customer
)

You should do INNER and OUTER joins for connecting the tables by their foreign keys.

You can also rewirite this (IMO) more clearly thus:

SELECT
  invoices.objectid,
  invoices.invoicenumber,
  invoices.invoicedate,
  salesorders.customer,
  customers.customernumber,
  customers.lastname
FROM invoices, salesorders, customers
WHERE salesorders.objectid = invoices.salesorderobjectid
  AND customers.objectid = salesorder.customer;

--
--------------------------------------------------------------------
Aaron Bingham
Senior Software Engineer
Cenix BioScience GmbH
--------------------------------------------------------------------


---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

              http://www.postgresql.org/docs/faq

Reply via email to