SQL JOIN Query for Retrieving Pics in Multiple Categories

  • Thread starter Thread starter DaveC426913
  • Start date Start date
  • Tags Tags
    Sql
AI Thread Summary
The discussion centers on querying a database with three tables: Pics, Categories, and PicsCategories, which establish a many-to-many relationship between pictures and their categories. The goal is to retrieve all pictures that belong to specified categories, specifically category IDs 2 (Female) and 3 (Parent). The proposed SQL query utilizes a subquery to select distinct pictures from the Pics table based on their IDs, which are matched against the PicsCategories table for the specified categories. The correct SQL syntax is highlighted, showing how to effectively use the IN clause with a subquery to achieve the desired results. Additionally, the use of table aliases (p for Pics and pc for PicsCategories) is explained, emphasizing their role in simplifying queries and improving clarity, especially when the same table is referenced multiple times. The discussion concludes with an affirmation of the effectiveness of the provided SQL solutions.
DaveC426913
Gold Member
Messages
23,838
Reaction score
7,833
I've got 3 tables:
Pics - table of my pictures
Categories - table of categories that pictures will fall into
PicsCategories - a many-to-many table relating pictures to categories. So the primary key of this table consists of a pic field and a category field

So now I want to provide a couple of categories as params and have it return all rows from the Pics table that are in those categories.

Code:
Table Pics
id Name
1 Bob
2 Mary
3 Jill
4 Jane

Table Categories
id Name
1 Male
2 Female
3 Parent

Table PicsCategories
Pic Cat
1   1
1   3
2   2
3   2
3   3
4   2
4   3
So if I supply Category1=2 OR Category2=3 (females and/or parents)
It should return Pic rows:
2
3
4
I'm looking at JOIN but JOIN is meant to extract data from two tables. I do not need ANY data from the PicsCategories table.

This is what I want:
SELECT UNIQUE(*) FROM Pics WHERE id=(SELECT Pic FROM PicsCategories WHERE Categories=2 OR Categories=3)
 
Last edited:
Technology news on Phys.org
Ah. It's a subquery.

Code:
SELECT DISTINCT * 
FROM Pics
WHERE id
IN (
SELECT Pic
FROM tblPicsCategories
WHERE Category=2
OR Category=3
)
Thanks for all your help! Couldn't have done it without you!
 
DaveC426913 said:
Ah. It's a subquery.

Code:
SELECT DISTINCT * 
FROM Pics
WHERE id
IN (
SELECT Pic
FROM tblPicsCategories
WHERE Category=2
OR Category=3
)
Thanks for all your help! Couldn't have done it without you!
I think this works as well:

select distinct p.* from pics p, tblPicsCategories pc where p.ID = pc.pic and (pc.Category = 2 or pc.Category = 3)
 
DavidSnider said:
I think this works as well:

select distinct p.* from pics p, tblPicsCategories pc where p.ID = pc.pic and (pc.Category = 2 or pc.Category = 3)
What are the p and pc?

I mean, I get that p means pic and pc means piccategories but...

select distinct tblPic.* from pics tblPic, tblPicsCategories tblPicsCategories where tblPic.ID = tblPicsCategories.pic and (tblPicsCategories.Category = 2 or tblPicsCategories.Category = 3)
 
p and pc are called aliases in this case. Sometimes written with an 'as' i.e.

...from pics as p, ...

I prefer the 'as' because I think it's clearer. There are two reasons for using them

1. It's quicker
2. You need it if the same table appears twice as a join

i.e.

select a.name, b.name
from mytrees as a, mytrees as b
where a.parent_id=b.id

Where parent_id contains the id of the row that contains its parent. You need an alias just to refer to the individual tables.
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
What percentage of programmers have learned to touch type? Have you? Do you think it's important, not just for programming, but for more-than-casual computer users generally? ChatGPT didn't have much on it ("Research indicates that less than 20% of people can touch type fluently, with many relying on the hunt-and-peck method for typing ."). 'Hunt-and-peck method' made me smile. It added, "For programmers, touch typing is a valuable skill that can enhance speed, accuracy, and focus. While...
I had a Microsoft Technical interview this past Friday, the question I was asked was this : How do you find the middle value for a dataset that is too big to fit in RAM? I was not able to figure this out during the interview, but I have been look in this all weekend and I read something online that said it can be done at O(N) using something called the counting sort histogram algorithm ( I did not learn that in my advanced data structures and algorithms class). I have watched some youtube...
Back
Top