Select rows from a table where row in another table with same id has a particular value in another column

后端 未结 3 2061
有刺的猬
有刺的猬 2021-02-04 08:46

In MySQL:

If we have two tables:

comments
key    |    value
=================
1      |    foo
2      |    bar
3      |    foobar
4      |    barfoo
         


        
3条回答
  •  野的像风
    2021-02-04 09:46

    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.

提交回复
热议问题