我下面有三张桌子,它们是连在一起的。表名为
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列。
根据我的建议,我增加了样本数据:
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列。
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;
还附加了将显示关系图像显示三个表之间的关系的图像
发布于 2016-05-01 09:08:16
上一个联接条件是错误的,因为它比较了两个主键(都是id
):
相反:
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_id
是null
的任何记录(可以吗?),那么保持计数就像您拥有的那样。
增编:清点条件
如果您只想获得count(IOA_INV_LINE_NOTE_MAP.id) > 0
的记录,那么将左边的外部连接转换为内部连接:
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
的情况感兴趣,那么您可以编写:
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;
https://stackoverflow.com/questions/36964344
复制相似问题