From: LFC on 29 Apr 2010 09:38 My tables represent, warranty data, problems at the factory and more failure data. Unforunately there are multiple occurances of serial numbers in all 3 tables so the relationships are many-to-many...I know this isn't a good thing, but I didn't know what else to do. Essentially what I want is to be able to see all cases of a serial number being involved in all three because it should help us improve quality if we can identify a reocurring problem over all 3 tables. I also found out that in one of my tables the the first digit and the last 4 digits of some serial numbers were not entered. I think that means I need to change to a like condition, but when I wrote it up I return no results. SELECT QIT_LWH_IMP_tbl.PIN, QIT_LWH_IMP_tbl.[Build Date], QIT_LWH_IMP_tbl.[Claim Number], QIT_LWH_IMP_tbl.[Part Number], QIT_LWH_IMP_tbl.[Failure Mode Code], QIT_LWH_IMP_tbl.[Failure Reason Code] FROM QIT_LWH_IMP_tbl, QIT_DTAC_IMP_tbl, QIT_Z3_QNOTE_tbl WHERE (((QIT_LWH_IMP_tbl.PIN) Like '*QIT_DTAC_IMP_tbl.PIN*' And (QIT_LWH_IMP_tbl.PIN) Like '*QIT_Z3_QNOTE_tbl.[Serial Number]*')); "Dirk Goldgar" wrote: > "LFC" <LFC(a)discussions.microsoft.com> wrote in message > news:11102FC3-00CE-4CEE-855D-607C725D87BD(a)microsoft.com... > > This is my sql statement so far: > > > > SELECT QIT_LWH_IMP_tbl.PIN, QIT_DTAC_IMP_tbl.Created, > > QIT_LWH_IMP_tbl.[Build > > Date], QIT_LWH_IMP_tbl.[Claim Number], QIT_LWH_IMP_tbl.[Part Number], > > QIT_LWH_IMP_tbl.[Failure Mode Code], QIT_Z3_QNOTE_tbl.[Where Found], > > QIT_Z3_QNOTE_tbl.Reviewed, QIT_Z3_QNOTE_tbl.Comments, > > QIT_Z3_QNOTE_tbl.[Coorelation Confirmed] > > FROM (QIT_LWH_IMP_tbl INNER JOIN QIT_DTAC_IMP_tbl ON QIT_LWH_IMP_tbl.PIN = > > QIT_DTAC_IMP_tbl.PIN) INNER JOIN QIT_Z3_QNOTE_tbl ON QIT_LWH_IMP_tbl.PIN = > > QIT_Z3_QNOTE_tbl.[Serial Number] > > WHERE (((QIT_LWH_IMP_tbl.PIN) Is Not Null) AND ((QIT_Z3_QNOTE_tbl.[Serial > > number]) Is Not Null) AND ((QIT_DTAC_IMP_tbl.PIN) Is Not Null)); > > > > I feel like I'm just one step away because if I include group by on the > > QIT_LWH_IMP_tbl.PIN then I get exactly what I'm looking for. > > Unfortunately I > > can't figure out a way around it. I tried doing > > DISTINCT(QIT_LWH_IMP_tbl.PIN) and it cut the results down significantly, > > but > > not as much as I would like. > > > You don't need your WHERE clause (in the above SQL), because the inner joins > on those fields will automatically exclude any records where the joined > fields are Null. > > But the problem is that your joins will naturally create duplicate output > records if there are more than one record in any table with the same PIN or > [Serial Number]. From your description, I think that must be at the root of > the problem you're facing. So long as your query must output fields from > all three tables, as you have it defined now, there is no way to reduce > these apparent duplicate records to a single record (whether by GROUP BY or > DISTINCT) and have that record be wholly updatable. That flows naturally > from the fact that any record that is collapsed from multiple records can't > have its data tracked back to a single source record to be updated. > > We need to step back and look at what you're trying to do from a broader > perspective. Since one-to-many relationships seem to be involved, maybe a > form/subform arrangement would suit your needs. Or, it *would* be possible > to write a query to extract all records in one table for which there are > matches in the other tables, and have that query be updatable -- so long as > the query doesn't need to return any fields from the other tables. > > Could you explain in more detail ... > > 1. What your tables represent, > 2. What the relationships between the tables are, and > 3. What you are really trying to do here? > > -- > Dirk Goldgar, MS Access MVP > Access tips: www.datagnostics.com/tips.html > > (please reply to the newsgroup) >
From: LFC on 29 Apr 2010 09:54 Also I forgot to mention that I think I'm going to go with a group by intially and then have a button linking to a sub form that will have all the instances of the serial number. "Dirk Goldgar" wrote: > "LFC" <LFC(a)discussions.microsoft.com> wrote in message > news:11102FC3-00CE-4CEE-855D-607C725D87BD(a)microsoft.com... > > This is my sql statement so far: > > > > SELECT QIT_LWH_IMP_tbl.PIN, QIT_DTAC_IMP_tbl.Created, > > QIT_LWH_IMP_tbl.[Build > > Date], QIT_LWH_IMP_tbl.[Claim Number], QIT_LWH_IMP_tbl.[Part Number], > > QIT_LWH_IMP_tbl.[Failure Mode Code], QIT_Z3_QNOTE_tbl.[Where Found], > > QIT_Z3_QNOTE_tbl.Reviewed, QIT_Z3_QNOTE_tbl.Comments, > > QIT_Z3_QNOTE_tbl.[Coorelation Confirmed] > > FROM (QIT_LWH_IMP_tbl INNER JOIN QIT_DTAC_IMP_tbl ON QIT_LWH_IMP_tbl.PIN = > > QIT_DTAC_IMP_tbl.PIN) INNER JOIN QIT_Z3_QNOTE_tbl ON QIT_LWH_IMP_tbl.PIN = > > QIT_Z3_QNOTE_tbl.[Serial Number] > > WHERE (((QIT_LWH_IMP_tbl.PIN) Is Not Null) AND ((QIT_Z3_QNOTE_tbl.[Serial > > number]) Is Not Null) AND ((QIT_DTAC_IMP_tbl.PIN) Is Not Null)); > > > > I feel like I'm just one step away because if I include group by on the > > QIT_LWH_IMP_tbl.PIN then I get exactly what I'm looking for. > > Unfortunately I > > can't figure out a way around it. I tried doing > > DISTINCT(QIT_LWH_IMP_tbl.PIN) and it cut the results down significantly, > > but > > not as much as I would like. > > > You don't need your WHERE clause (in the above SQL), because the inner joins > on those fields will automatically exclude any records where the joined > fields are Null. > > But the problem is that your joins will naturally create duplicate output > records if there are more than one record in any table with the same PIN or > [Serial Number]. From your description, I think that must be at the root of > the problem you're facing. So long as your query must output fields from > all three tables, as you have it defined now, there is no way to reduce > these apparent duplicate records to a single record (whether by GROUP BY or > DISTINCT) and have that record be wholly updatable. That flows naturally > from the fact that any record that is collapsed from multiple records can't > have its data tracked back to a single source record to be updated. > > We need to step back and look at what you're trying to do from a broader > perspective. Since one-to-many relationships seem to be involved, maybe a > form/subform arrangement would suit your needs. Or, it *would* be possible > to write a query to extract all records in one table for which there are > matches in the other tables, and have that query be updatable -- so long as > the query doesn't need to return any fields from the other tables. > > Could you explain in more detail ... > > 1. What your tables represent, > 2. What the relationships between the tables are, and > 3. What you are really trying to do here? > > -- > Dirk Goldgar, MS Access MVP > Access tips: www.datagnostics.com/tips.html > > (please reply to the newsgroup) >
From: Dirk Goldgar on 29 Apr 2010 22:56 "LFC" <LFC(a)discussions.microsoft.com> wrote in message news:DAB18FE2-B309-4BDE-A718-A9A1F93E111A(a)microsoft.com... > My tables represent, warranty data, problems at the factory and more > failure > data. Unforunately there are multiple occurances of serial numbers in all > 3 > tables so the relationships are many-to-many...I know this isn't a good > thing, but I didn't know what else to do. Essentially what I want is to > be > able to see all cases of a serial number being involved in all three > because > it should help us improve quality if we can identify a reocurring problem > over all 3 tables. I also found out that in one of my tables the the > first > digit and the last 4 digits of some serial numbers were not entered. I > think > that means I need to change to a like condition, but when I wrote it up I > return no results. > > SELECT QIT_LWH_IMP_tbl.PIN, QIT_LWH_IMP_tbl.[Build Date], > QIT_LWH_IMP_tbl.[Claim Number], QIT_LWH_IMP_tbl.[Part Number], > QIT_LWH_IMP_tbl.[Failure Mode Code], QIT_LWH_IMP_tbl.[Failure Reason Code] > FROM QIT_LWH_IMP_tbl, QIT_DTAC_IMP_tbl, QIT_Z3_QNOTE_tbl > WHERE (((QIT_LWH_IMP_tbl.PIN) Like '*QIT_DTAC_IMP_tbl.PIN*' And > (QIT_LWH_IMP_tbl.PIN) Like '*QIT_Z3_QNOTE_tbl.[Serial Number]*')); Hmm, to see all cases from all tables in one list, you're going to have to use a union query, and a union query can't be updatable. Therefore, I think I would do something like this: 1. Create a union query to get master list of all serial numbers in all tables. Let each record in the union query also include a calculated field identifying which table it comes from. Use UNION, not UNION ALL, so that there will be only one record returned from each table for any given serial number. (I'm going to assume for now that you don't care if there are multiple records for the same serial number in one table; only if there are records for that serial number in two or more of the tables.) The SQL might look like: SELECT PIN As SerialNo, "L" As SourceTable FROM QIT_LWH_IMP_tbl UNION SELECT PIN As SerialNo, "D" As SourceTable FROM QIT_DTAC_IMP_tbl UNION SELECT [Serial Number] As SerialNo, "Z" As SourceTable FROM QIT_Z3_QNOTE_tbl Suppose we save this query as "qryAllSerialNos". 2. Create a query that selects from the union query above, only those records that have matching records from one of the other tables. It might have SQL like this: SELECT * FROM qryAllSerialNos WHERE (SourceTable = "L" AND Exists( SELECT PIN FROM QIT_DTAC_IMP_tbl WHERE PIN = SerialNo ) OR Exists( SELECT [Serial Number] FROM QIT_Z3_QNOTE_tbl WHERE [Serial Number] = SerialNo ) ) OR (SourceTable = "D" AND Exists( SELECT PIN FROM QIT_LWH_IMP_tbl WHERE PIN = SerialNo ) OR Exists( SELECT [Serial Number] FROM QIT_Z3_QNOTE_tbl WHERE [Serial Number] = SerialNo ) ) OR (SourceTable = "Z" AND Exists( SELECT PIN FROM QIT_LWH_IMP_tbl WHERE PIN = SerialNo ) OR Exists( SELECT PIN FROM QIT_DTAC_IMP_tbl WHERE PIN = SerialNo ) ) That's pretty hairy, and I don't know how efficient it will be, but it might work. If any "Like" comparisons need to be done, they can be put in later, but I'm interested to see if this approach works. Save that query as "qrySerialNosMultiple". Now, opening that query all by itself should show you what serial numbers are problematic, and what tables they're in. But if you want to be able to update the records or see the detail of each, that approach is too simplistic. For that, I think I would proceed as follows: Put a list box on an unbound form, and set the list box's rowsource to qrySerialNosMultiple. Let the list box have two columns, one for SerialNo and one for SourceTable, and let the SerialNo column be the list box's bound column. Put three subforms on that form, one bound to each of the three tables, each subform set in continuous forms view (or datasheet view). Set the Link Master Fields property of each subform control to the name of the list box. Set the Link Child Fields property of each subform to the name of the serial-number field in that subform's recordsource table -- PIN or [Serial Number]. Now, whenever you click on a serial number in the list box, you'll see the matching records, if any, in each of the subforms. That will let you decide what to do about them, and potentially do it on the spot. -- Dirk Goldgar, MS Access MVP Access tips: www.datagnostics.com/tips.html (please reply to the newsgroup)
From: Dirk Goldgar on 29 Apr 2010 23:05 "LFC" <LFC(a)discussions.microsoft.com> wrote in message news:21E2D7A8-2895-4D17-82DC-EE45429C7D98(a)microsoft.com... > Also I forgot to mention that I think I'm going to go with a group by > intially and then have a button linking to a sub form that will have all > the > instances of the serial number. That's similar to the idea I just proposed, actually. Your query with all inner joins, though, will only find records where the serial number is in all three tables. -- Dirk Goldgar, MS Access MVP Access tips: www.datagnostics.com/tips.html (please reply to the newsgroup)
First
|
Prev
|
Pages: 1 2 3 Prev: Combo Box not displaying properly Next: Blank Template with rows and columns |