繁体   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