In MySQL:
If we have two tables:
comments
key | value
=================
1 | foo
2 | bar
3 | foobar
4 | barfoo
and:
meta
comment_key | value
=========================
1 | 1
2 | 1
3 | 2
4 | 1
I want to get the comments from the comment table that have a corresponding comment_key in the meta table that have a specific value (the value column in the meta table).
For example, I’d like to select all the rows from the comment table that have a value of 1 in the meta table:
I’d expect these results:
key | value
=================
1 | foo
2 | bar
4 | barfoo
And if I were to select all the rows from the comment table that have a value of 2 in the meta table:
I’d expect this result:
key | value
=================
3 | foobar
I really hope someone can help, thank you all in advance!
I think I need to do a join? Any pointers would be great, and if at all possible, a short explanation so I can work out where I was going wrong -> so I’ll know for next time!
I actually wouldn’t recommend a JOIN for this — or rather, I’d recommend a “semijoin“, which is a relational-algebra concept not directly expressed in SQL. A semijoin is essentially a join where you want to retrieve records from only one table, but with the proviso that they have corresponding records in a different table.
In SQL notation, this concept is expressed indirectly, by using an
INclause, with a subquery:(MySQL will actually end up translating that back into a semijoin internally — essentially a sort of degenerate inner-join — but the
INclause is the natural way to express it in raw SQL.)