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

Avi*_*Avi 1 mysql sql foreign-keys

我有一个(简化的)场景,如下所示:

文件表:

   id   |    title   |  text
   ===========================
    1   |    Title1  |  "AAA"
    2   |    Title2  |  "BBB" 
    3   |    Title3  |  "CCC"
Run Code Online (Sandbox Code Playgroud)

记录图片

   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"
Run Code Online (Sandbox Code Playgroud)

让我们来命名这些表documentsdoc_pictures.我正在尝试创建一个查询,该查询将返回包含多个图片的所有文档.在此示例中,这意味着仅返回具有id的文档1.

限制和假设:

  1. 这两个表都很庞大,因此复杂的查询可能需要很长时间.
  2. 我不关心文档有多少外国图片行.我只关心它超过1.
  3. 我不介意输出是文档的id还是图片表中的行.
  4. 我不介意只获得这些文档的一小部分(例如10个文档有超过1张图片,而不是所有文档都有超过1张图片)

db是Mysql

Mik*_*erg 10

这可用于获取文档ID.

 select 
     doc_id,
     count(1)
 from 
     doc_pictures
 group by 
     doc_id
 having 
     count(1) > 1
Run Code Online (Sandbox Code Playgroud)

然后你可以使用这些ID where indocuments桌面上使用.

像这样的东西:

 select 
     *
 from
     documents
 where 
     id in (
        select 
            doc_id                
        from 
            doc_pictures
        group by 
            doc_id
        having 
            count(1) > 1
     )
Run Code Online (Sandbox Code Playgroud)