Hello Bob,

BobSharp wrote:
Picture does not seem to have been carried in the message,  posts with 
attachment did not seem to get through either.
So  hope the link works.


Below is the ER diagram in an exercise I am trying to do.
http://www.probowluk.co.uk/images/er_ECA_001.jpg

It's been going well so far,  and several ColdFusion pages written already.

Need to do one for a  Purchase Order Report   for  ...
 -   given  SupplierCode
 -   given StartDate and EndDate of Orders

My problem is in the CFquery  -   understanding what JOINS to use and in what 
order to use them.


Which kind of join to write all depends on how inclusive you want your results to be. On a sheet of paper draw two overlapping circles (yes this is a Venn diagram). In the left circle, write "left", in the right circle write "right", and where they overlap write "inner".

Above each circle put the name of a table. From your diagram and your descriptoin is sounds like you wanted to link Suppliers and PurchaseOrders. Put "Suppliers" over the left circle and "PurchaseOrders" over the right.

If I assume that `Suppliers`.`SupplierCode` and `PurchaseOrders`.`SupplierCodefk` are the same numbers then here is how to get your results.

Remember: a JOIN is a form of cross-product between two tables. If you have one row in one table and it matches to 3 rows in the other table, then the first table's data will be listed 3 times. This correct and proper behavior for a database.

To get the list of all rows in Suppliers and any matching rows from PurchaseOrders, use this form:

SELECT ...
FROM `Suppliers`
LEFT JOIN `PurchaseOrders`
  ON `Suppliers`.`SupplierCode` = `PurchaseOrders`.`SupplierCodefk`
WHERE ...

To get all of the rows from PurchaseOrders and only those matching rows from Suppliers, use:

SELECT ...
FROM `Suppliers`
RIGHT JOIN `PurchaseOrders`
  ON `Suppliers`.`SupplierCode` = `PurchaseOrders`.`SupplierCodefk`
WHERE ...

And if you only want to list rows from either table if they have at least one matching row in the other, use:

SELECT ...
FROM `Suppliers`
INNER JOIN `PurchaseOrders`
  ON `Suppliers`.`SupplierCode` = `PurchaseOrders`.`SupplierCodefk`
WHERE ...

The WHERE clause is optional. Of course, you will have to either supply a list of columns or use the * operator for the SELECT clause but this is the general shape of the command you will want to use.

--
Shawn Green, MySQL Senior Support Engineer
Sun Microsystems, Inc.
Office: Blountville, TN



--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=arch...@jab.org

Reply via email to