Thread: Can I do this smarter?
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? TIA -- Groeten, Joost Kraaijeveld Askesis B.V. Molukkenstraat 14 6524NB Nijmegen tel: 024-3888063 / 06-51855277 fax: 024-3608416 web: www.askesis.nl
On 7/13/06, Joost Kraaijeveld <J.Kraaijeveld@askesis.nl> wrote:
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.
==================================================================
Aaron Bono
Aranya Software Technologies, Inc.
http://www.aranya.com
==================================================================
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?
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.
==================================================================
Aaron Bono
Aranya Software Technologies, Inc.
http://www.aranya.com
==================================================================
Hi Aaron, On Thu, 2006-07-13 at 22:52 -0500, Aaron Bono wrote: > 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. Thanks for the quick (and working ;-)) response. -- Groeten, Joost Kraaijeveld Askesis B.V. Molukkenstraat 14 6524NB Nijmegen tel: 024-3888063 / 06-51855277 fax: 024-3608416 web: www.askesis.nl
This is clearly the "Aaron helps day" ;-) Thanks, -- Groeten, Joost Kraaijeveld Askesis B.V. Molukkenstraat 14 6524NB Nijmegen tel: 024-3888063 / 06-51855277 fax: 024-3608416 web: www.askesis.nl
Aaron Bono wrote: > On 7/13/06, *Joost Kraaijeveld* <J.Kraaijeveld@askesis.nl > <mailto:J.Kraaijeveld@askesis.nl>> 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 --------------------------------------------------------------------