多くの場合、適切な記事を見つけて StackOverflow で読むことで、どうすればよいかわからなかった多くのことを解決できましたが、初めて、記事を書く必要があると思いました。この問題について正しい答えを探していましたが、見つけられませんでした。
バグは、2 つのテーブルと 1 つの交差テーブルを作成してそれらを関連付けたことです。
背後にあるアイデアはとてもシンプルです (私はこれを解決できないことを恥ずかしく思います)。
1 つの BBS 記事には、いくつかのファイルが添付されている場合があります。つまり、1 つの記事に添付ファイルがある場合とない場合があります。1 つの記事に複数の添付ファイルを含めることができます。
私がやろうとしてきたことは
添付ファイルに関するすべての情報を含む記事のリストを取得しますが、重複する行はありません。
わかりました... 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
)
添付ファイルの有無にかかわらず、すべての記事を選択したいのですが、1 つの記事に複数の添付ファイルがある場合、必要なのは添付ファイルの 1 つだけです。(どちらでも構いません)
はい、ばかげているように聞こえますが、ここには 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 expression を与え続けます 私は長い間解決策を探していました. 集計関数または「ヒント」を使用することを提案した人が何人かいます (それがそれである場合...)
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