很多时候只是找到合适的文章并在 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 开发人员,所以我必须做所有的事情
事情……很糟糕,我正在尽力而为

任何明智的想法?

提前致谢

-ps ——
我已经尝试过类似...
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 关系时,才需要单独的交集表。

更新:但是,如果您仍然需要保持 NN 关系(如您的评论中所述),那么您可以使用 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/

10-12 12:59