2017-12-22 2 views
1

Ich beabsichtige, ein Update basierend auf Join durchzuführen, aber einen Fehler zu erhalten. Was fehlt? Bitte helfen Sie.Nicht eindeutige Tabelle/Alias ​​für Join

update 
    vna.patients, 
    vna.patient_observations, 
    vna.studies, 
    vna.series, 
    vna.instances, 
    vna.sop_classes, 
    vna.files, 
    vna.modalities, 
    vna.issuers 
join patient_observations on atients.patient_id=patient_observations.patient_id 
join studies 
    on patient_observations.study_id=studies.study_id 
    AND studies.patient_id=patients.patient_id 
join series 
    on series.study_id=studies.study_id 
join instances 
    on instances.series_id=series.series_id 
join sop_classes 
    on sop_classes.sop_class_id=instances.sop_class_id 
join files 
    on files.instance_id=instances.instance_id 
left join modalities 
    on modalities.modality_id=series.modality_id 
left join issuers 
    on (patients.issuer_of_patient_identifier=issuers.issuer_id) 
set PATIENT_NAME='AAPM' 
WHERE PATIENT_IDENTIFIER='TG18-2002'; 

ERROR 1066 (42000): Not unique table/alias: 'patient_observations' 

Antwort

2

Sie brauchen nicht wieder Tabellennamen angeben, welche

Teil mitmachen erscheint
UPDATE 
    vna.patients 
    JOIN patient_observations 
    ON patients.patient_id = patient_observations.patient_id 
    JOIN studies 
    ON patient_observations.study_id = studies.study_id 
    AND studies.patient_id = patients.patient_id 
    JOIN series 
    ON series.study_id = studies.study_id 
    JOIN instances 
    ON instances.series_id = series.series_id 
    JOIN sop_classes 
    ON sop_classes.sop_class_id = instances.sop_class_id 
    JOIN files 
    ON files.instance_id = instances.instance_id 
    LEFT JOIN modalities 
    ON modalities.modality_id = series.modality_id 
    LEFT JOIN issuers 
    ON (patients.issuer_of_patient_identifier = issuers.issuer_id) 
    SET PATIENT_NAME = 'AAPM' 
WHERE PATIENT_IDENTIFIER = 'TG18-2002' ; 
+1

Danke, das funktioniert. – kingsmasher1

+0

@ kingsmasher1 aber ich schlage vor, Sie einen Blick auf den zweiten Ansatz von Gordon Linoff vorschlagen kann sein einfaches Update und nicht alle Joins –

+0

Joins benötigt werden, da jeder der Tabelle Fremdschlüssel Referenzen auf andere hat und dort kann Aktualisierungen in mehreren Tabellen gleichzeitig durchführen. – kingsmasher1

0

Die Fehlermeldung ist sehr klar, die Tabelle patient_observations aufgeführt wird zweimal in dem Tabellenverweis in Ihrer Anfrage. Geben Sie der zweite einen anderen Alias, wenn Sie es wirklich brauchen anschließen wieder in der gleichen Abfrage:

... 
vna.issuers 
join patient_observations as po2 on patients. .... 

Andernfalls entfernen einer von ihnen.

Versuchen Sie auch, anstelle dieser alten Syntax die ANSI-SQL-Join-Syntax zu verwenden.

2

Warum Sie die beiden unterschiedlichen JOIN Syntaxen Mischen werden? Einfache Regel: Nie Kommas in der FROM Klausel (und das gilt auch für UPDATE). Ich glaube, du hast vor:

update vna.patients p 
     patient_observations po 
     on p.patient_id = po.patient_id join 
     studies st 
     on po.study_id = st.study_id AND 
      st.patient_id = p.patient_id join 
     series s 
     on s.study_id = st.study_id join 
     instances i 
     on i.series_id = s.series_id join 
     sop_classes sc 
     on sc.sop_class_id = i.sop_class_id join 
     files f 
     on f.instance_id = i.instance_id left join 
     modalities m 
     on m.modality_id = s.modality_id left join 
     issuers iss 
     on (p.issuer_of_patient_identifier = iss.issuer_id) 
    set p.PATIENT_NAME = 'AAPM' 
    where p.PATIENT_IDENTIFIER = 'TG18-2002'; 

Das scheint viel zu kompliziert. Ich schätze, Sie wollen nur:

update vna.patients p 
    set p.PATIENT_NAME = 'AAPM' 
    where p.PATIENT_IDENTIFIER = 'TG18-2002'; 
Verwandte Themen