[AccessD] SQL help

William Hindman wdhindman at dejpolsystems.com
Sun Dec 14 01:12:05 CST 2008


Pete

...there is NO SQL that will produce ALL THREE Req = Yes data entries using 
a single CusID filter parameter from your given data ...if you actually want 
that then you must remove the CusID filter.

...if Req is a Yes/No field then the Access SQL WITH a CusID filter 
parameter would be:

SELECT Table1.ConID, Table2.CusID, Table1.Req, Table1.Desc, Table2.Comment
FROM Table1 INNER JOIN Table2 ON Table1.ConID = Table2.ConID
WHERE (((Table2.CusID)=[Enter CusID]) AND ((Table1.Req)=True))
ORDER BY Table1.ConID, Table2.CusID;

...you would replace the [Enter CusID] parameter I used with your form 
parameter ...hth.

William

--------------------------------------------------
From: "Pete Phillipps" <pete at vftt.co.uk>
Sent: Saturday, December 13, 2008 7:15 PM
To: "'Access Developers discussion and problem solving'" 
<accessd at databaseadvisors.com>
Subject: Re: [AccessD] SQL help

> Hi Bobby,
>
> <<In your expected output below for cusID=1, you will not get the
> conID=5 from table 1 because there are no items in table 2 linking cusid=1
> and conid=5.>>
> The problem is that I need all three rows from table 1 where Req =
> Yes even if there are no matching entries in table 2, so that you can see
> which lines have a comment and which lines don't.
> Table 3 isn't actually needed as the query gets the customer ID from
> a text box on the main form (which displays their details) - I only 
> included
> it to show that there can be customers in table 3 and no related records 
> in
> table 2.
>
> Pete
>
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Bobby Heid
> Sent: 13 December 2008 22:05
> To: 'Access Developers discussion and problem solving'
> Subject: Re: [AccessD] SQL help
>
> Pete,
>
> SELECT Table3.CusID, Table3.CustName, Table1.Desc, Table1.Req,
> Table2.Comment FROM (Table3 INNER JOIN Table2 ON Table3.CusID =
> Table2.CusID) INNER JOIN
> Table1 ON Table2.ConID = Table1.ConID
> WHERE (((Table3.CusID)=1) AND ((Table1.Req)=True));
>
> Based upon what you say you want, I think you would ONLY get the following
> records:
>
> Customer ID = 1
> ConID Desc Req CusID Comment
> 2 A2 Yes 1 Yes
>
> Customer ID = 2
> ConID Desc Req CusID Comment
> 1 A1 Yes 2 Me
> 2 A2 Yes 2 Word
>
> Customer ID = 3
> ConID Desc Req CusID Comment
>
> The reason is:
> For ID = 1, there are 2 matches in table 2 (con id =2 and 3)
> For con id=2 (in table 1), you have one match in table 1 where req =
> true
> For con id=3 (in table 1), there are 0 records in table 1 where req
> = true
>
> For ID = 2, there are 2 matches in table 2 (con id =1 and 2)
> For con id=1, you have one match in table 1 where req = true
> For con id=2, you have one match in table 1 where req = true
>
> For ID = 3, there are 0 matches in table 2
>
> To get to table 3 from table one, you have to go through table 2
>
> Here's the query for cusID = 1:
>
> SELECT Table3.CusID, Table3.CustName, Table1.Desc, Table1.Req,
> Table2.Comment
> FROM (Table3
> INNER JOIN Table2 ON Table3.CusID = Table2.CusID)
> INNER JOIN Table1 ON Table2.ConID = Table1.ConID
> WHERE Table3.CusID=1 AND Table1.Req=True
>
> In your expected output below for cusID=1, you will not get the conID=5 
> from
> table 1 because there are no items in table 2 linking cusid=1 and conid=5.
>
> Hope this helps,
> Bobby
>
> -----Original Message-----
> From: accessd-bounces at databaseadvisors.com
> [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Pete Phillipps
> Sent: Saturday, December 13, 2008 2:51 PM
> To: 'Access Developers discussion and problem solving'
> Subject: [AccessD] SQL help
>
> Hi Everyone,
>
> I am trying to get some data from the following tables into a list.
> The basics of the tables are shown below:
>
> TABLE 1
> ConID Desc Req
> 1 A1 Yes
> 2 A2 Yes
> 3 A3 No
> 4 A3 No
> 5 A5 Yes
>
> TABLE 2
> CusID ConID Comment
> 1 2 Yes
> 1 3 Yep
> 2 1 Me
> 2 2 Word
>
> TABLE 3
> CusID Name
> 1 Fred
> 2 Daphne
> 3 Scooby
>
> What I want is to select a customer from table 3 and get a list of
> all items from table 1 where Req is Yes, along with any matching comment
> from table 2 for that customer (if there are any), like the following
> examples:
>
> ConID Desc Req CusID Comment
> 1 A1 Yes 1
> 2 A2 Yes 1 Yes
> 5 A5 Yes 1
>
> ConID Desc Req CusID Comment
> 1 A1 Yes 2 Me
> 2 A2 Yes 2 Word
> 5 A5 Yes 2
>
> ConID Desc Req CusID Comment
> 1 A1 Yes 3
> 2 A2 Yes 3
> 5 A5 Yes 3
>
> What I can't do is get a SQL join that will bring up the results
> like that. I've tried the following:
>
> SELECT Table1.ConID, Table1.Desc, Table1.Req, Table2.CusID, Table2.Comment
> FROM Table2 RIGHT JOIN Table1 ON Table2.ConID = Table1.ConID WHERE
> (((Table1.Req)<>0) AND ((Table2.CusID)=1)) ORDER BY Table1.ConID,
> Table2.CusID;
>
> But that just produces (for customer 1) the following:
>
> ConID Desc Req CusID Comment
> 2 A2 Yes 1 Yes
>
> How can I construct the SQL to produce the result as required?
>
> Pete
>
>
> --
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com No virus found in this incoming
> message.
> Checked by AVG - http://www.avg.com
> Version: 8.0.176 / Virus Database: 270.9.17/1846 - Release Date: 
> 12/12/2008
> 18:59
>
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com
> 




More information about the AccessD mailing list