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"

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

限制和假设

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

数据库是Mysql

4

2 回答 2

10

这可用于获取文档 ID。

 select 
     doc_id,
     count(1)
 from 
     doc_pictures
 group by 
     doc_id
 having 
     count(1) > 1

然后您可以使用这些 idwhere in在桌子上使用 a 。documents

像这样的东西:

 select 
     *
 from
     documents
 where 
     id in (
        select 
            doc_id                
        from 
            doc_pictures
        group by 
            doc_id
        having 
            count(1) > 1
     )
于 2013-10-28T13:06:20.090 回答
0
select doc_id
from doc_pictures
group by doc_id
having count(distinct url) > 1;
于 2013-10-28T13:08:28.730 回答