From: Steve on
In your form to enter PersonCategory, do you enter Category through a
combobox with a rowsource of a value list? If not and you type in A, B, C,
then you rin a large risk of a typo in a record making the data in
TblPersonCategory unreliable.

Steve
santus(a)penn.com


"Lars Brownies" <Lars(a)Browniew.com> wrote in message
news:hqnphq$2lmd$1(a)textnews.wanadoo.nl...
>I have 2 tables:
>
> tblPerson
> ID_person*
> Lastname
> Firstname
> etc.
>
> tblPersonCategory
> ID_person*
> Category* (which can have value A, B, or C)
>
> Many people can have zero, one or more categories.
>
> Since the values are A, B, and C, I felt no need to put them in an extra
> table.
>
>> If you want to see a query that pulls all [ID_Person] where Category = A
>> or Category = B, consider creating a new query in design view, setting
>> these selection criteria, then switching the view to the SQL view.
>
> I have no problem with that *OR* query. What I need is all the unique
> ID_numbers that have *both* A and C as their category. Or as another
> example A and B and C. An AND statement doesn't work in this case.
>
> Lars
>
>
> "Jeff Boyce" <nonsense(a)nonsense.com> schreef in bericht
> news:eakpbTZ4KHA.4964(a)TK2MSFTNGP05.phx.gbl...
>> Lars
>>
>> I may be reading too much into your description...
>>
>> It sounds like your table for Categories include Persons (or at least
>> PersonIDs). In a well-normalized relational database table of
>> categories, there'd be no person-related information.
>>
>> If you are noting persons by category, that would seem to imply three
>> tables, one for persons, one for categories, and one for the junction
>> between them (i.e., person X category).
>>
>> If you want to see a query that pulls all [ID_Person] where Category = A
>> or Category = B, consider creating a new query in design view, setting
>> these selection criteria, then switching the view to the SQL view.
>>
>> Good luck!
>>
>> Regards
>>
>> Jeff Boyce
>> Microsoft Access MVP
>>
>> --
>> Disclaimer: This author may have received products and services mentioned
>> in this post. Mention and/or description of a product or service herein
>> does not constitute endorsement thereof.
>>
>> Any code or pseudocode included in this post is offered "as is", with no
>> guarantee as to suitability.
>>
>> You can thank the FTC of the USA for making this disclaimer
>> possible/necessary.
>>
>> "Lars Brownies" <Lars(a)Browniew.com> wrote in message
>> news:hqnnhh$2l0f$1(a)textnews.wanadoo.nl...
>>> I'm testing with filter queries.
>>>
>>> I have a table with fields ID_person and Category. Both fields belong to
>>> the primary key. Pulling out the unique ID numbers which have Category A
>>> is simple:
>>>
>>> SELECT ID_person
>>> FROM tblCategory
>>> WHERE (((Category)="A"));
>>>
>>> But I would like to pull out every unique ID numbers that has for
>>> instance both "A" and "C" as its category. How can I do that?
>>>
>>> Thanks,
>>>
>>> Lars
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>


From: Lars Brownies on
Thanks! Dirk, others,
Indeed that's what I meant.

In relation to my other post 'Filter suggestions in form' I don't see that I
can add the main table (Person) to this 3-in-1 query. The query wouldn't be
editable. So this seems to be no option.

I'm trying to normalize a table, and even in 1st normal form, it seems to
give me more hassle than benefits. Do you agree?

Lars


"Dirk Goldgar" <dg(a)NOdataSPAMgnostics.com.invalid> schreef in bericht
news:u5Y1zdZ4KHA.6060(a)TK2MSFTNGP04.phx.gbl...
> "Lars Brownies" <Lars(a)Browniew.com> wrote in message
> news:hqnnhh$2l0f$1(a)textnews.wanadoo.nl...
>> I'm testing with filter queries.
>>
>> I have a table with fields ID_person and Category. Both fields belong to
>> the primary key. Pulling out the unique ID numbers which have Category A
>> is simple:
>>
>> SELECT ID_person
>> FROM tblCategory
>> WHERE (((Category)="A"));
>>
>> But I would like to pull out every unique ID numbers that has for
>> instance both "A" and "C" as its category. How can I do that?
>
>
> If I understand your question correctly, you may have multiple records in
> tblCategory for the same ID_Person, each with a different value for
> Category, and you want to extract those values of ID_Person for which
> there is a record for Category "A" and another record for Category "C".
> Is that correct?
>
> If so, then a query like this would probably do it:
>
> SELECT DISTINCT ID_person FROM tblCategory C
> WHERE
> Exists(SELECT T.ID_person FROM tblCategory T
> WHERE T.ID_person = C.ID_Person And T.Category = "A")
> AND
> Exists(SELECT T.ID_person FROM tblCategory T
> WHERE T.ID_person = C.ID_Person And T.Category = "C")
>
> There are a couple of other ways to do it, I think, but this one follows
> the logic (as I understand it) closest.
>
> --
> Dirk Goldgar, MS Access MVP
> Access tips: www.datagnostics.com/tips.html
>
> (please reply to the newsgroup)
>
From: Paul Shapiro on
Which table do you want to be able to edit? If you're form's record source
is based on Person, then maybe a filter clause like this one based on Dirk's
response would work? I think this should work with a form record source like
Select * From Person.

Exists (
SELECT * FROM tblCategory T
WHERE T.ID_person = Person.ID_Person And T.Category = "A"
)
And
Exists (
SELECT * FROM tblCategory T
WHERE T.ID_person = Person.ID_Person And T.Category = "B"
)

If not, you see if a form record source like this would leave Person data
editable:

Select Person.*, Not IsNull(C1.personID) as HasCategoryA, Not
IsNull(C2.personID) as HasCategoryB
From Person
Left Outer Join tblCategory C1 On C1.personID=Person.personID And
C1.Category = "A"
Left Outer Join tblCategory C2 On C2.personID=Person.personID And
C2.Category = "B"


"Lars Brownies" <Lars(a)Browniew.com> wrote in message
news:hqnquu$2mab$1(a)textnews.wanadoo.nl...
> Thanks! Dirk, others,
> Indeed that's what I meant.
>
> In relation to my other post 'Filter suggestions in form' I don't see that
> I can add the main table (Person) to this 3-in-1 query. The query wouldn't
> be editable. So this seems to be no option.
>
> I'm trying to normalize a table, and even in 1st normal form, it seems to
> give me more hassle than benefits. Do you agree?
>
> Lars
>
>
> "Dirk Goldgar" <dg(a)NOdataSPAMgnostics.com.invalid> schreef in bericht
> news:u5Y1zdZ4KHA.6060(a)TK2MSFTNGP04.phx.gbl...
>> "Lars Brownies" <Lars(a)Browniew.com> wrote in message
>> news:hqnnhh$2l0f$1(a)textnews.wanadoo.nl...
>>> I'm testing with filter queries.
>>>
>>> I have a table with fields ID_person and Category. Both fields belong to
>>> the primary key. Pulling out the unique ID numbers which have Category A
>>> is simple:
>>>
>>> SELECT ID_person
>>> FROM tblCategory
>>> WHERE (((Category)="A"));
>>>
>>> But I would like to pull out every unique ID numbers that has for
>>> instance both "A" and "C" as its category. How can I do that?
>>
>>
>> If I understand your question correctly, you may have multiple records in
>> tblCategory for the same ID_Person, each with a different value for
>> Category, and you want to extract those values of ID_Person for which
>> there is a record for Category "A" and another record for Category "C".
>> Is that correct?
>>
>> If so, then a query like this would probably do it:
>>
>> SELECT DISTINCT ID_person FROM tblCategory C
>> WHERE
>> Exists(SELECT T.ID_person FROM tblCategory T
>> WHERE T.ID_person = C.ID_Person And T.Category = "A")
>> AND
>> Exists(SELECT T.ID_person FROM tblCategory T
>> WHERE T.ID_person = C.ID_Person And T.Category = "C")
>>
>> There are a couple of other ways to do it, I think, but this one follows
>> the logic (as I understand it) closest.
>>
>> --
>> Dirk Goldgar, MS Access MVP
>> Access tips: www.datagnostics.com/tips.html

From: Dirk Goldgar on
"Lars Brownies" <Lars(a)Browniew.com> wrote in message
news:hqnquu$2mab$1(a)textnews.wanadoo.nl...
>
> In relation to my other post 'Filter suggestions in form' I don't see that
> I can add the main table (Person) to this 3-in-1 query. The query wouldn't
> be editable. So this seems to be no option.

I think Paul Shapiro addressed this in his reply.

> I'm trying to normalize a table, and even in 1st normal form, it seems to
> give me more hassle than benefits. Do you agree?

No. Properly normalized tables increase the power and flexibility of your
database. Though they may sometimes require more complex SQL to answer
certain kinds of questions, they make it possible to answer all sorts of
questions that are otherwise difficult or impossible even to frame.

--
Dirk Goldgar, MS Access MVP
Access tips: www.datagnostics.com/tips.html

(please reply to the newsgroup)

From: John Spencer on
One more possibility

SELECT tblPerson.*
FROM tblPerson
WHERE tblPerson.ID_Person in
(SELECT ID_Person
FROM tblPersonCategory
WHERE Category in ('A','B')
GROUP BY Id_Person
HAVING Count(Id_Person) = 2)

This should work since tblPersonCategory has a primary key based on Id_Person
plus Category. At least that is my assumption based on the asterisks in your
table descriptions.


John Spencer
Access MVP 2002-2005, 2007-2010
The Hilltop Institute
University of Maryland Baltimore County

Paul Shapiro wrote:
> Which table do you want to be able to edit? If you're form's record
> source is based on Person, then maybe a filter clause like this one
> based on Dirk's response would work? I think this should work with a
> form record source like Select * From Person.
>
> Exists (
> SELECT * FROM tblCategory T
> WHERE T.ID_person = Person.ID_Person And T.Category = "A"
> )
> And
> Exists (
> SELECT * FROM tblCategory T
> WHERE T.ID_person = Person.ID_Person And T.Category = "B"
> )
>
> If not, you see if a form record source like this would leave Person
> data editable:
>
> Select Person.*, Not IsNull(C1.personID) as HasCategoryA, Not
> IsNull(C2.personID) as HasCategoryB
> From Person
> Left Outer Join tblCategory C1 On C1.personID=Person.personID And
> C1.Category = "A"
> Left Outer Join tblCategory C2 On C2.personID=Person.personID And
> C2.Category = "B"
>
>
> "Lars Brownies" <Lars(a)Browniew.com> wrote in message
> news:hqnquu$2mab$1(a)textnews.wanadoo.nl...
>> Thanks! Dirk, others,
>> Indeed that's what I meant.
>>
>> In relation to my other post 'Filter suggestions in form' I don't see
>> that I can add the main table (Person) to this 3-in-1 query. The query
>> wouldn't be editable. So this seems to be no option.
>>
>> I'm trying to normalize a table, and even in 1st normal form, it seems
>> to give me more hassle than benefits. Do you agree?
>>
>> Lars
>>
>>
>> "Dirk Goldgar" <dg(a)NOdataSPAMgnostics.com.invalid> schreef in bericht
>> news:u5Y1zdZ4KHA.6060(a)TK2MSFTNGP04.phx.gbl...
>>> "Lars Brownies" <Lars(a)Browniew.com> wrote in message
>>> news:hqnnhh$2l0f$1(a)textnews.wanadoo.nl...
>>>> I'm testing with filter queries.
>>>>
>>>> I have a table with fields ID_person and Category. Both fields
>>>> belong to the primary key. Pulling out the unique ID numbers which
>>>> have Category A is simple:
>>>>
>>>> SELECT ID_person
>>>> FROM tblCategory
>>>> WHERE (((Category)="A"));
>>>>
>>>> But I would like to pull out every unique ID numbers that has for
>>>> instance both "A" and "C" as its category. How can I do that?
>>>
>>>
>>> If I understand your question correctly, you may have multiple
>>> records in tblCategory for the same ID_Person, each with a different
>>> value for Category, and you want to extract those values of ID_Person
>>> for which there is a record for Category "A" and another record for
>>> Category "C". Is that correct?
>>>
>>> If so, then a query like this would probably do it:
>>>
>>> SELECT DISTINCT ID_person FROM tblCategory C
>>> WHERE
>>> Exists(SELECT T.ID_person FROM tblCategory T
>>> WHERE T.ID_person = C.ID_Person And T.Category = "A")
>>> AND
>>> Exists(SELECT T.ID_person FROM tblCategory T
>>> WHERE T.ID_person = C.ID_Person And T.Category = "C")
>>>
>>> There are a couple of other ways to do it, I think, but this one
>>> follows the logic (as I understand it) closest.
>>>
>>> --
>>> Dirk Goldgar, MS Access MVP
>>> Access tips: www.datagnostics.com/tips.html
>