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