Mysql 用于选择具有多个主键表链接的外键行的SQL查询

Mysql 用于选择具有多个主键表链接的外键行的SQL查询,mysql,sql,foreign-keys,Mysql,Sql,Foreign Keys,我有一个(简化的)场景是这样的: select * from documents where id in ( select doc_id from doc_pictures group by doc_id having count(1) > 1

我有一个(简化的)场景是这样的:

 select 
     *
 from
     documents
 where 
     id in (
        select 
            doc_id                
        from 
            doc_pictures
        group by 
            doc_id
        having 
            count(1) > 1
     )
文档表

   id   |    title   |  text
   ===========================
    1   |    Title1  |  "AAA"
    2   |    Title2  |  "BBB" 
    3   |    Title3  |  "CCC"
文档图片

   id   |   doc_id    |  url
   ===================================================
    1   |    1       |  "http://some.domain.com/1.jpg"
    2   |    1       |  "http://some.domain.com/2.jpg"
    3   |    2       |  "http://some.domain.com/3.jpg"
    4   |    4       |  "http://some.domain.com/3.jpg"
让我们将这些表命名为
文档
文档图片
。我正在尝试创建一个查询,该查询将返回包含多张图片的所有文档。在本例中,这意味着仅返回id为
1
的文档

限制和假设

   id   |    title   |  text
   ===========================
    1   |    Title1  |  "AAA"
    2   |    Title2  |  "BBB" 
    3   |    Title3  |  "CCC"
  • 这两个表都很大,因此复杂的查询可能需要花费太长时间
  • 我不在乎文档中有多少外国图片行。我只在乎它不止一个
  • 我不介意输出是文档的id还是图片表中的行
  • 我不介意只获取此类文档的一小部分(例如,10个文档包含多张图片,而不是所有文档包含多张图片)

  • 数据库是Mysql

    这可用于获取文档ID

     select 
         doc_id,
         count(1)
     from 
         doc_pictures
     group by 
         doc_id
     having 
         count(1) > 1
    
    然后,您可以使用这些ID在
    文档
    表上的
    where in

    大概是这样的:

     select 
         *
     from
         documents
     where 
         id in (
            select 
                doc_id                
            from 
                doc_pictures
            group by 
                doc_id
            having 
                count(1) > 1
         )
    

    这可用于获取文档ID

     select 
         doc_id,
         count(1)
     from 
         doc_pictures
     group by 
         doc_id
     having 
         count(1) > 1
    
    然后,您可以使用这些ID在
    文档
    表上的
    where in

    大概是这样的:

     select 
         *
     from
         documents
     where 
         id in (
            select 
                doc_id                
            from 
                doc_pictures
            group by 
                doc_id
            having 
                count(1) > 1
         )
    

    问题是什么?它没有返回正确的结果。上面投票的答案是正确的。问题是什么?它没有返回正确的结果。上面投票的答案确实如此。