In MySQL:
If we have two tables:
comments
key | value
=================
1 | foo
2 | bar
3 | foobar
4 | barfoo
You're looking for a plain, vanilla equi-join here.
SELECT `comment`.`key` AS `key`,
`comment`.`value` AS `value`
FROM `comments`
JOIN `meta`
ON `comments`.`key` = `meta`.`comment_key`
WHERE `meta`.`value` = 1;
I'm not really sure what sort of advice you're looking for here but you can read more about the topic (not MySQL specific) at Wikipedia's SQL JOIN page.
I'd recommend indexing on comment
.key
and meta
.comment_key
with both being PRIMARY KEY indexes assuming that you want there to only be 1 meta
row per comment
row (PRIMARY KEYs are UNIQUE by definition). If you want to allow more than 1 meta
per comment
then add a separate index id
column to meta
and make that the PRIMARY KEY with comment_key
just a b-tree index.
I'm also not sure how the performance of this will compare to the "semi-join" answer also listed but, to me, this is the simpler and more natural way to express the query; with only two tables, though, it shouldn't be too challenging for MySQL to optimize.