首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >表中的联接不能正常工作。

表中的联接不能正常工作。
EN

Stack Overflow用户
提问于 2016-05-01 07:49:15
回答 1查看 43关注 0票数 0

我下面有三张桌子,它们是连在一起的。表名为

代码语言:javascript
运行
复制
1) i IOA_INVOICE_LINE
2)  IOA_INVOICE_LINE_NOTES
3) IOA_INV_LINE_NOTE_MAP

一张图片被附在一起,它将以图形的方式显示你的关系。我正在尝试从IOA_INV_LINE_NOTE_MAP表中获取ioa_invoice_line表中每个id列的计数。请建议如何将具有上下文的IOA_INV_LINE_NOTE_MAP表的列IOA_INV_LINE_NOTE_MAP计数计算到ioa_invoice_line表中的id列。

根据我的建议,我增加了样本数据:

代码语言:javascript
运行
复制
IOA_INVOICE_LINE  :- 

ID             VERSION
1234            Abc


IOA_INVOICE_LINE_NOTES :-

ID       INLI_ID        NOTES
345      1234           Aqou


INV_LINE_NOTE_MAP :-

ID      INV_LINE_NOTE_ID        ATTACHEMENT
23            345                 rtfffr
24            345                 fhgygg

下面是已实现的查询,但它不起作用,因为它将结果显示为0,应该注意的是,期望值应该是2,因为表INV_LINE_NOTE_MAP中共有2行,对应于IOA_INVOICE表的id 1234,请建议如何将带有上下文的IOA_INV_LINE_NOTE_MAP表的列inv_line_note_id的总数计算为ioa_invoice_line表中的id列。

代码语言:javascript
运行
复制
select ioa_invoice_line.id, count(IOA_INV_LINE_NOTE_MAP.attachment_blob_id) as totalAttachment
from ioa_invoice_line
     left outer join ioa_invoice_line_notes 
              on ioa_invoice_line.id = ioa_invoice_line_notes.inli_id
     left outer join IOA_INV_LINE_NOTE_MAP 
              on ioa_invoice_line_notes.id = IOA_INV_LINE_NOTE_MAP.id
              where  ioa_invoice_line.id =1234 
GROUP BY ioa_invoice_line.id;

还附加了将显示关系图像显示三个表之间的关系的图像

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-01 09:08:16

上一个联接条件是错误的,因为它比较了两个主键(都是id):

相反:

代码语言:javascript
运行
复制
select ioa_invoice_line.id, count(IOA_INV_LINE_NOTE_MAP.id) as totalAttachment
from ioa_invoice_line
     left outer join ioa_invoice_line_notes 
              on ioa_invoice_line.id = ioa_invoice_line_notes.inli_id
     left outer join IOA_INV_LINE_NOTE_MAP 
              on ioa_invoice_line_notes.id = IOA_INV_LINE_NOTE_MAP.INV_LINE_NOTE_ID
              where  ioa_invoice_line.id =1234 
GROUP BY ioa_invoice_line.id;

注意INV_LINE_NOTE_ID

如果你感兴趣的是统计记录,我也建议你数一数IOA_INV_LINE_NOTE_MAP.id。但是,如果您想要排除attachment_blob_idnull的任何记录(可以吗?),那么保持计数就像您拥有的那样。

增编:清点条件

如果您只想获得count(IOA_INV_LINE_NOTE_MAP.id) > 0的记录,那么将左边的外部连接转换为内部连接:

代码语言:javascript
运行
复制
select ioa_invoice_line.id, count(IOA_INV_LINE_NOTE_MAP.id) as totalAttachment
from ioa_invoice_line
     inner join ioa_invoice_line_notes 
              on ioa_invoice_line.id = ioa_invoice_line_notes.inli_id
     inner join IOA_INV_LINE_NOTE_MAP 
              on ioa_invoice_line_notes.id = IOA_INV_LINE_NOTE_MAP.INV_LINE_NOTE_ID
              where  ioa_invoice_line.id =1234 
GROUP BY ioa_invoice_line.id;

但是,如果您的条件是计数中的其他条件,则可以在组by之后使用having子句。它像where一样工作,但是在分组发生后执行操作,您可以引用聚合,比如count等等。

例如,如果您只对count(IOA_INV_LINE_NOTE_MAP.id) > 2的情况感兴趣,那么您可以编写:

代码语言:javascript
运行
复制
select ioa_invoice_line.id, count(IOA_INV_LINE_NOTE_MAP.id) as totalAttachment
from ioa_invoice_line
     inner join ioa_invoice_line_notes 
              on ioa_invoice_line.id = ioa_invoice_line_notes.inli_id
     inner join IOA_INV_LINE_NOTE_MAP 
              on ioa_invoice_line_notes.id = IOA_INV_LINE_NOTE_MAP.INV_LINE_NOTE_ID
              where  ioa_invoice_line.id =1234 
GROUP BY ioa_invoice_line.id
HAVING count(IOA_INV_LINE_NOTE_MAP.id) > 2;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36964344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档