gpt4 book ai didi

oracle - 从交叉点/连接表中选择

转载 作者:行者123 更新时间:2023-12-01 23:24:59 24 4
gpt4 key购买 nike

很多时候只是找到合适的文章并在 StackOverflow 上阅读它对我有帮助经历了很多我不知道该怎么办的事情,但这是第一次,我想我需要写一篇。我一直在寻找关于这个问题的正确答案,但一直找不到。

问题是我创建了 2 个表和一个交集表来关联它们。

背后的想法很简单(我解决不了这个我都快尴尬了)

一篇 BBS 文章可能有一些附件。这意味着一篇文章可以有附件,也可以没有。一篇文章可以有多个附件。

我一直在努力做的是

获取文章列表及其附件的所有信息,但没有重复的行。

好吧...我尝试放置 DDL 但无法正确格式化...

create table article(
id PK
some other stuff...
)

create table attachment(
id PK
physical_file_name
etc...
)

这里是路口

create table article_attachment(
id PK(synthetic)
article_id FK
attachment_ID FK
)

我想选择所有文章,无论是否有任何附件但如果一篇文章有​​多个附件,我只需要其中一个附件。(哪一个都不重要)

是的,这听起来很愚蠢,但这里没有 DBA 或 SQL 开发人员,所以我必须做所有的事情事情...很乱我正在尽力

有什么好主意吗?

提前致谢

-附注-我试过类似...

with refined_table as(

select file_id, row_number() over(partition by id order by id desc) as seq
from consumer_file

)
select *
from consumer_info ci
left outer join consumer_file cf on cf.consumer_id = ci.id
left outer join refined_table rt on rt.file_id = cf.file_id
where rt.seq =1

但是我不太明白它是如何工作的

更新

这是我最初尝试的。它一直给我 ORA-00979: 不是 GROUP BY 表达式我寻找了很长时间的解决方案。一些人建议使用聚合函数或“提示”(如果是这样...)

  with refined_table as(

select file_id, row_number() over(partition by id order by id desc) as seq
from consumer_file

)

我是这个意思

嗯,有什么想法吗?

非常感谢大家:)

SELECT 
CI.id as article_id,
DF.id as attachment_id,
DF.PHYSICAL_NAME as file_name
FROM
CONSUMER_INFO CI
LEFT OUTER JOIN
CONSUMER_FILE CF ON CF.CONSUMER_ID = CI.ID
LEFT OUTER JOIN
DEFAULT_FILE DF ON CF.FILE_ID = DF.id
GROUP BY
CI.ID

最佳答案

如果它只有来自文章 -> 附件的 1->N 关系,那么您可以按如下方式修改附件:

create table attachment(
id PK
article_id FK
physical_file_name
etc...
)

仅当文章和附件之间存在 N->N 关系时才需要单独的交集表。

更新:但是,如果您仍然需要保持 N<->N 关系(如评论中所述),则可以使用 GROUP BY 子句按 article_id 对结果进行分组,例如:

SELECT 
article.id as article_id,
attachment.id as attachment_id,
attachment.physical_file_name as file_name
FROM
article
LEFT OUTER JOIN
article_attachment ON article_id = article.id
LEFT OUTER JOIN
attachment ON attachment_id = attachment.id
GROUP BY
article_id

关于oracle - 从交叉点/连接表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10713952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com