Avatar billede dannv Nybegynder
11. oktober 2004 - 13:12 Der er 1 kommentar og
1 løsning

join fra flere tabeller

Jeg er kommet frem til følgende sql som joiner fra 4 tabeller som ser nogenlunde således ud.

analysis:
------------------------------
|id|analysis_name|active|....|
------------------------------

analysis_field:
-------------------------------------------
|id|analysis_id|text_id|reported_vale|....|
-------------------------------------------

result:
-----------------------------------------------------------
|id|sample_id|analysis_id|analysis_field_id|reported_value|
-----------------------------------------------------------

sample:
----------------
|id|remark|....|
----------------

SELECT a.id, a.analysis_name, af.text_id, af.unit, r.reported_value, a.active
FROM analysis a
LEFT JOIN analysis_fields af on a.id = af.analysis_id and af.id = r.analysis_field_id
LEFT JOIN result r on (r.analysis_id = a.id)
WHERE r.sample_id = 2
AND r.analysis_id = 3;

Det jeg vil have ud er 'id' fra analyse, 'analysis_name' + 'active' fra analyse 'Text_id' + 'unit' fra analysis_fields. Samt diverse info fra result.

Der vil være et entry i sample med en sample id.
Der vil være et entry i analysis med analysen der refereres.
Der vil være et antal felter i analysis_fields som kender sin analyse (via analysis_id).
Der vil i kunne være max det samme antal rækker som i analysis_fields. Et resultat kender sin sample, analyse og analysis field.

Data jeg vil have ud skal se nogenlunde sådan ud:

--------------------------------------------------------------
|analysis.id|analysis.unit|analysis_field.textid|result.value|
--------------------------------------------------------------

ovenstående sql skriver data ud hvor der både er rækker i result + analysis field. Det jeg ønsker er også at få skrevet rækker ud som findes i analysis_field men ikke i result...

Det var en lang forklaring... håber det kan hjælpe
Avatar billede eagleeye Praktikant
11. oktober 2004 - 16:57 #1
Prøv noget i stil med dette:

SELECT a.id, a.analysis_name, af.text_id, af.unit, r.reported_value, a.active
FROM analysis a
LEFT JOIN analysis_fields af on a.id = af.analysis_id
LEFT JOIN result r on r.analysis_field_id = af.id
WHERE r.sample_id = 2 AND r.analysis_field_id is null
AND r.analysis_id = 3;
Avatar billede dannv Nybegynder
12. oktober 2004 - 10:24 #2
Har fundet den... løsningen var en union... jeg henter så først de resultater som ligger i min resultat tabel, og derefter henter jeg resultater fra min analysis_field_tabel, disse bliver så knyttet sammen vha. UNION...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester