很多时候只是找到合适的文章并在 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:not a 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