简体   繁体   English

在一个中连接两个表,在另一个表中有一个id和多个id

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

I have a table content that is joined with content_image . 我有一个与content_image连接的表格content There can be different images for a single content_id . 单个content_id可以有不同的图像。 I want to join them with case, according to image_size . 根据image_size ,我想用case连接它们。

In other words, I have one content, with 3 different images sizes. 换句话说,我有一个内容,有3种不同的图像大小。 But these images are in another table, so I want to show only one content, with 3 different images in one output. 但是这些图像在另一个表中,所以我想只显示一个内容,在一个输出中有3个不同的图像。

Anyway hope the code will be more clear in my explanation: 无论如何希望代码在我的解释中更清楚:

    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

and the output code: 和输出代码:

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

The problem is this generates two outputs. 问题是这会产生两个输出。 In first one, only the big value is populated. 在第一个中,只填充了big值。 In the second one, only the small value is populated. 在第二个中,仅填充small值。 If I group the cfoutput by content_id , then it does generate a single result, but again - only the big value is defined :) But I want a single output with both big and small values defined. 如果我组CFOUTPUT通过content_id ,则它产生一个结果,但再次-只有big值定义:)不过我想这两个单个输出bigsmall定义值。

Thank you all for help! 谢谢大家的帮助!

show only one content with 3 different images in one output. 在一个输出中仅显示一个具有3个不同图像的内容。

If I am understanding correctly, you are trying to return a single record with both image size. 如果我理解正确,您尝试返回具有两个图像大小的单个记录。 To achieve that result you must JOIN to your image table multiple times: once for each of the image sizes. 要获得该结果,您必须多次加入图像表:每个图像尺寸一次。

Again as Dan mentioned above , if you wish to preserve the OUTER JOIN's any filtering on those tables must be done within the JOIN 's, not the WHERE clause, otherwise you end up doing an implicit INNER JOIN instead. 再次如上所述 ,如果你想保留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

Let's start with this: 让我们从这开始:

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

It looks ok but it's not. 它看起来不错,但事实并非如此。 When you refer to an outer joined table in your where clause, it effectively becomes an inner join. 当您在where子句中引用外部联接表时,它实际上变为内部联接。 The fix is to move that filter to your from clause, like this: 修复是将该过滤器移动到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

Next, you can use the group attribute of the cfoutput tag to manipulate the display of your recordset. 接下来,您可以使用cfoutput标记的group属性来操作记录集的显示。 For the query above, you would want something like this. 对于上面的查询,你会想要这样的东西。

<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