Souvent, le fait de trouver le bon article et de le lire sur StackOverflow m'a aidé. beaucoup de choses dont je ne savais pas quoi faire, mais pour la première fois, je pense que je dois en écrire un. J'ai cherché la bonne réponse à cette question mais je n'ai pas réussi à en trouver une.
Le problème est que j'ai créé deux tables et une table d'intersection pour les relier.
L'idée sous-jacente est si simple (je suis presque gêné de ne pas pouvoir la résoudre).
Un article du BBS PEUT avoir QUELQUES fichiers attachés. Cela signifie qu'un article peut avoir une pièce jointe ou non. Un article peut avoir plusieurs pièces jointes.
Ce que j'ai essayé de faire, c'est
obtenir la liste des articles avec toutes les informations sur ses pièces jointes mais sans les lignes en double.
Ok... J'ai essayé de mettre en place la DDL mais je n'ai pas pu la formater correctement...
create table article(
id PK
some other stuff...
)
create table attachment(
id PK
physical_file_name
etc...
)
et voici l'intersection
create table article_attachment(
id PK(synthetic)
article_id FK
attachment_ID FK
)
Je veux sélectionner tous les articles, qu'ils aient ou non des pièces jointes. mais si un article a plusieurs pièces jointes, je n'ai besoin que d'une seule d'entre elles. (peu importe laquelle).
Oui, cela semble stupide, mais il n'y a pas de DBA ou de développeur SQL ici, alors je dois faire tout ce qui est nécessaire. choses... C'est un peu le bordel, mais je fais de mon mieux.
Des idées judicieuses ?
Merci d'avance
-p.s. - J'ai essayé quelque chose comme...
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
mais je ne comprends pas vraiment comment cela fonctionne.
UPDATE
Voici ce que j'ai essayé au début. Cela me donne toujours ORA-00979:pas d'expression GROUP BY J'ai cherché la solution pendant longtemps. Quelques personnes ont suggéré d'utiliser fonction d'agrégation ou "Hint" (si c'est ce que c'est...)
with refined_table as(
select file_id, row_number() over(partition by id order by id desc) as seq
from consumer_file
)
Je veux dire ceci
Hmm, des idées ?
Merci beaucoup à vous tous : )
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