Avatar billede dannv Nybegynder
01. februar 2006 - 15:40 Der er 12 kommentarer og
1 løsning

join i mysql 5

Hej efter opgradering til 5.0 er der nogle af mine ældre sql sætninger som ikke længere virker. Det er LEFT JOIN den fejler på.. her er et eksempel:

SELECT sample.id, sample.batch, sample.created_by,
sample.created_date, sample.remark, compound.chemical_name,
analysis.analysis_name, analysis_map.map_name
FROM sample, sample_analysis_link, analysis
LEFT JOIN analysis_map on sample.analysis_map_id = analysis_map.id
LEFT JOIN compound on sample.compound_id = compound.id
WHERE sample.id = 1
AND sample_analysis_link.analysis_id = analysis.analysis_id
AND sample_analysis_link.analysis_version = analysis.version
AND sample.id = sample_analysis_link.sample_id;

Den giver følgende fejl:

Error 2: java.sql.SQLException: Unknown column 'sample.analysis_map_id' in 'on clause'

Kan en forklare hvordan jeg skal ændre sytax...??
Avatar billede arne_v Ekspert
01. februar 2006 - 15:58 #1
1)  skift konsekvent til JOIN og undlad "komma join"

2)  brug konsekvent parenteser

    FROM ((... xxxx JOIN ... ON ...=...) xxxx JOIN ... ON ...=...) xxxx JOIN ... ON ...=...
Avatar billede arne_v Ekspert
01. februar 2006 - 15:58 #2
og komma join er bare JOIN
Avatar billede dannv Nybegynder
01. februar 2006 - 19:12 #3
to ting

1. er den syntaks du anbefaler bagud kompatibel i mysql...???
2. kan du ikke prøve at omskrive ovenstående sætning til den syntaks du mener er den bedste...??
Avatar billede arne_v Ekspert
02. februar 2006 - 03:02 #4
re 1)

ja
Avatar billede arne_v Ekspert
02. februar 2006 - 03:06 #5
re 2)

utestet:

SELECT sample.id, sample.batch, sample.created_by,
sample.created_date, sample.remark, compound.chemical_name,
analysis.analysis_name, analysis_map.map_name
FROM (((sample JOIN sample_analysis_link sample.id = sample_analysis_link.sample_id)
JOIN analysis ON sample_analysis_link.analysis_id = analysis.analysis_id AND sample_analysis_link.analysis_version = analysis.version)
LEFT JOIN analysis_map on sample.analysis_map_id = analysis_map.id)
LEFT JOIN compound on sample.compound_id = compound.id
WHERE sample.id = 1;
Avatar billede dannv Nybegynder
02. februar 2006 - 08:19 #6
Hej igen,

Jeg har testet, og den kommer med følgende fejl:

Not unique table/alias: 'sample'

Men jeg kan ikke lige gennemskue hvorfor, det eneste sted hvor 'sample' tabellen er refereret er i .... FROM (((sample JOIN....

Kan du gennemskue denne..??
Avatar billede dannv Nybegynder
02. februar 2006 - 09:05 #7
Hej Arne

har fundet fejlen... der manglede et ON efter ... sample JOIN sample_analysis_link...

En ny opgave på vej bliv hængende...
Avatar billede dannv Nybegynder
02. februar 2006 - 15:19 #8
Her kommer lidt flere problemer som jeg ikke kan gennemskue, der er naturligvis flere points... :-)

SELECT s.locked, s.id, af.id, af.text_id, af.unit, r.status, r.reported_value, r.locked, r.id
FROM sample_analysis_link sal,analysis_fields af, sample s
LEFT OUTER JOIN result r ON s.id = r.sample_id AND af.id = r.analysis_field_id
WHERE s.id = sal.sample_id
AND af.analysis_id = sal.analysis_id
AND af.analysis_version = sal.analysis_version
AND s.id = 2
AND af.analysis_id = 1;

Jeg mangler her et eksempel mere så kan det være at jeg forstår det...
Avatar billede dannv Nybegynder
03. februar 2006 - 17:27 #9
Mangler også svar så der kan uddeles point...
Avatar billede arne_v Ekspert
03. februar 2006 - 17:52 #10
SELECT s.locked, s.id, af.id, af.text_id, af.unit, r.status, r.reported_value, r.locked, r.id
FROM ((sample_analysis_link sal JOIN analysis_fields af ON af.analysis_id = sal.analysis_id
AND af.analysis_version = sal.analysis_version)
JOIN sample s ON s.id = sal.sample_id)
LEFT OUTER JOIN result r ON s.id = r.sample_id AND af.id = r.analysis_field_id
WHERE s.id = 2
AND af.analysis_id = 1;

tror jeg
Avatar billede arne_v Ekspert
03. februar 2006 - 17:57 #11
og et svar
Avatar billede arne_v Ekspert
03. februar 2006 - 19:58 #12
det virkede ?
Avatar billede dannv Nybegynder
04. februar 2006 - 15:02 #13
jep hold øjnene åbne så kommer der lige et spørgsmål med ekstra points for indsatsen...
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