[SQL] [Mysql] Subselect durch Join ersetzen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von MaxDev, 27. Oktober 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 27. Oktober 2010
    [Mysql] Subselect durch Join ersetzen

    Hallo zusammen,

    ich möchte gern das folgende Statement in einen View bauen. Die Condition "DepartmentId = n" soll dann von außen getätigt werden können.

    Ich komm nicht weiter. Könnte ihr mir helfen? Heut bin ich zu doof dazu.

    Code:
    SELECT A.* FROM Appointment A
    WHERE A.Id NOT IN (
     SELECT DA.AppointmentId 
     FROM DepartmentAppointment DA 
     WHERE DA.DepartmentId = 1
    )
    
    Die Tabellen sind prinzipiell etwa so aufgebaut:
    Code:
    Appointment
    --------------------------------
    Id
    Title
    
    Department
    --------------------------------
    Id
    Titel
    
    DepartmentAppointment
    --------------------------------
    Id 
    DepartmentId
    AppointmentId
    //EDIT: Sorry, falls ich mich blöd augedrückt habe. Mit der Tabelle DepartmentAppointment möchte ich Verbindungen (Beziehungen) zwichen Appointments und Departments ausdrücken. Das Statement soll mir alle Appointments zu Departments anzeigen, die noch nicht zuegordent sind. Verständlicher ?

    Vielen Dank im Voraus für jede Hilfe
    MaxDev
     
  2. 27. Oktober 2010
    AW: [Mysql] Subselect durch Join ersetzen

    meinst du das hier?? ansonsten verstehe ich deine frage nicht

    Code:
    SELECT A.* 
    FROM DepartmentAppointment DA 
    JOIN Appointment A
    ON DA.AppointmentId = A.id
    JOIN Department D
    ON DA.DepartmentId = D.id
    WHERE D.id = ?
    
    gruß
     
  3. 28. Oktober 2010
    AW: [Mysql] Subselect durch Join ersetzen

    OK, nachdem ich lange lange rumgefrickelt und ein paar Stunden drüber geschlafen habe, ist nun doch noch die Lösung auf den Tisch gekommen:

    Code:
    SELECT
     X.DepartmentId
    , A.*
    FROM (
     SELECT D.ID AS DepartmentID, A.ID AS AppointmentID
     FROM Appointment A
     CROSS JOIN Department AS D
    ) AS X
    LEFT JOIN DepartmentAppointment DA ON DA.DepartmentId = X.DepartmentId AND DA.AppointmentId = X.AppointmentId
    INNER JOIN Appointment A ON X.AppointmentId = A.Id
    WHERE DA.DepartmentId IS NULL
    ORDER BY X.DepartmentId, A.Title
    Das Cross Join war es, was mir fehlte.

    Vielen Dank für die Bemühungen, die gemacht wurden
    MaxDev
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.