簡體   English   中英

SQL查詢,用於選擇具有多個指向主鍵表的鏈接的外鍵行

[英]SQL query for selecting foreign-key rows with more than one link to the primary-key table

我有一個(簡化的)場景,像這樣:

文件表

   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

這可用於獲取文檔ID。

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

然后,您可以使用這些ID在documents表中使用where in

像這樣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM