簡體   English   中英

在一個中連接兩個表,在另一個表中有一個id和多個id

[英]join two tables in one with one id and multiple ids in another table

我有一個與content_image連接的表格content 單個content_id可以有不同的圖像。 根據image_size ,我想用case連接它們。

換句話說,我有一個內容,有3種不同的圖像大小。 但是這些圖像在另一個表中,所以我想只顯示一個內容,在一個輸出中有3個不同的圖像。

無論如何希望代碼在我的解釋中更清楚:

    SELECT C.CHAPTER_ID,CH.CHAPTER,C.CONTENT_ID,
           C.CONT_HEAD AS NAME,
           SMALL=(CASE WHEN CI.IMAGE_SIZE=0 THEN CONTIMAGE_SMALL END),
           BIG=(CASE WHEN CI.IMAGE_SIZE=2 THEN CONTIMAGE_SMALL END),
           C.UPDATE_DATE,
           C.RECORD_DATE
    FROM   CONTENT C
               LEFT OUTER JOIN CONTENT_CHAPTER CH ON C.CHAPTER_ID = CH.CHAPTER_ID
               LEFT OUTER JOIN CONTENT_IMAGE CI ON CI.CONTENT_ID=C.CONTENT_ID
    WHERE  CH.CONTENTCAT_ID = 14
    ORDER BY C.UPDATE_DATE DESC,C.RECORD_DATE DESC

和輸出代碼:

    <cfoutput query="get_images">
        <a class="highslide" target="_blank" onclick="return hs.expand(this, { slideshowGroup: 1 } )" href="/documents/content/#big#"><img src="/documents/content/#small#" title="#name#" border="0" /></a>
    </cfoutput>

問題是這會產生兩個輸出。 在第一個中,只填充了big值。 在第二個中,僅填充small值。 如果我組CFOUTPUT通過content_id ,則它產生一個結果,但再次-只有big值定義:)不過我想這兩個單個輸出bigsmall定義值。

謝謝大家的幫助!

在一個輸出中僅顯示一個具有3個不同圖像的內容。

如果我理解正確,您嘗試返回具有兩個圖像大小的單個記錄。 要獲得該結果,您必須多次加入圖像表:每個圖像尺寸一次。

再次如上所述 ,如果你想保留OUTER JOIN,那么對這些表的任何過濾都必須JOIN完成, 而不是 WHERE子句,否則你最終會做一個隱式的INNER JOIN

 SELECT C.CHAPTER_ID
       , CH.CHAPTER
       , C.CONTENT_ID
       , C.UPDATE_DATE
       , C.RECORD_DATE
       , C.CONT_HEAD AS NAME
       , CIS.CONTIMAGE_SMALL AS SMALLImage
       , CIB.CONTIMAGE_SMALL AS BIGImage
 FROM CONTENT C
         LEFT OUTER JOIN CONTENT_CHAPTER CH 
             ON C.CHAPTER_ID = CH.CHAPTER_ID AND CH.CONTENTCAT_ID = 14
         LEFT OUTER JOIN CONTENT_IMAGE CIS 
             ON CIS.CONTENT_ID = C.CONTENT_ID AND CIS.IMAGE_SIZE = 0
         LEFT OUTER JOIN CONTENT_IMAGE CIB 
             ON CIB.CONTENT_ID = C.CONTENT_ID AND CIB.IMAGE_SIZE = 2
ORDER BY C.UPDATE_DATE DESC,C.RECORD_DATE DESC

讓我們從這開始:

FROM CONTENT C
LEFT OUTER JOIN CONTENT_CHAPTER CH ON C.CHAPTER_ID = CH.CHAPTER_ID
LEFT OUTER JOIN CONTENT_IMAGE CI ON CI.CONTENT_ID=C.CONTENT_ID
WHERE CH.CONTENTCAT_ID = 14

它看起來不錯,但事實並非如此。 當您在where子句中引用外部聯接表時,它實際上變為內部聯接。 修復是將該過濾器移動到from子句,如下所示:

FROM CONTENT C
LEFT OUTER JOIN CONTENT_CHAPTER CH ON C.CHAPTER_ID = CH.CHAPTER_ID
and CH.CONTENTCAT_ID = 14

LEFT OUTER JOIN CONTENT_IMAGE CI ON CI.CONTENT_ID=C.CONTENT_ID

接下來,您可以使用cfoutput標記的group屬性來操作記錄集的顯示。 對於上面的查詢,你會想要這樣的東西。

<cfoutput query="yourquery" group="content_id">
#content_id#
<cfoutput>
#big# #small#
</cfoutput>
</cfoutput>

暫無
暫無

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

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