SQL Abfrage Problem

  • Hallo,

    ich habe folgendes Problem, habe 3 tabellen (Adressdaten, Einsätze und ID) ich würde jetzt eine Abfrage benötigen die mir alle Namen aus der Adressliste anzeigt wo kein Einsatz hinterlegt ist.

    Tabelle Adressdaten z.B. Bauer, Mustermann, Huber
    Bauer hat einen eingetragenen Einsart, Mustermann und Huber nicht.

    Dann hätte ich gerne die Ausgabe Mustermann ud Huber.

    Ist das möglich?

    Weiß nicht obs weiter Hilft, hier meine Abfrage damit ich die Namen aufgelistet mit allen teilgenommenen Einsätzen bekomme, jetzt müßte er mir quasi das umgekehrte anzeigen, alle die keine Einsätze haben.

    Das wäre die dazugehörige Ausgabe:

  • Du suchst nach LEFT JOIN. Dein Statement entsprechend umgebaut sähe so aus:

    SQL
    SELECT     
     contacts.first_name,     
     contacts.last_name,     
     es_einsaetze.art 
    FROM     contacts
    LEFT JOIN es_einsaetze ON es_einsaetze_contacts_c.es_einsaetze_contactscontacts_ida = contacts.id
    LEFT JOIN es_einsaetze_contacts_c ON es_einsaetze.id = es_einsaetze_contacts_c.es_einsaetze_contactses_einsaetze_idb
    WHERE es_einsaetze.art IS NULL

    Um das zu verstehen solltest Du mal die WHERE-Bedingung weglassen und dir das Ergebnis dann anschauen ;)

    Siehe auch Manual:
    http://dev.mysql.com/doc/refman/5.1/de/join.html

  • irgendwie bekomme ich da ein #1054 - Unknown column 'es_einsaetze_contacts_c.es_einsaetze_contactscontacts_ida' in 'on clause'

    Das nächste problme ist so wie ich das sehe gibst du alles aus wo keine Einsatzart hinterlegt ist.
    Was ich aber bräuchte ist eine Liste mit Keinem Einsatz und eine extrige Liste mit keiner uebung, also nicht art = NULL sondern einmal art = kein Einsatz und einmal art = keine uebung

  • Ich hab nur das Statement von dir oben kopiert und angepasst. Wenn ein Spaltennamen nicht stimmt von dem ich nichts weiß, musst Du das entsprechend deinen Tabellen anpassen.

    Wenn Du mein Beispiel verstanden hast, wirst Du das Statement auch so erweitern können, dass das rauskommt was Du willst. Dazu musst Du lediglich die WHERE-Bedingung anpassen. Wie genau kannst nur Du wissen da ich ebenfalls nicht deinen Tabellenaufbau kenne.

  • ich danke dir schon mal für deine Hilfe aber mein Statement funzzt aber deins ned :( und ich find den Fehler ned. Scheiße doch mal einen SQL kurs belegen.


    und hier deine Abfrage


    sorry wenn ich mich grad anstelle wie voldepp, aber anhand einer nicht funktioniereden Abfrage tue ich mich schwehr einen fehler zu finden wenn ich die abfrage noch ned verstanden habe.

  • Nochmal:

    Wenn ein Spaltennamen nicht stimmt von dem ich nichts weiß, musst Du das entsprechend deinen Tabellen anpassen.

    Da ich deine Tabellen weiterhin nicht kenne, kann ich dir auch nicht sagen welche Spalte hier falsch geschrieben ist/nicht existiert.

  • Also ich versuche es anders zu erklären.
    Ich frage ab wer alles Übungen eingetragen hat

    SQL
    SELECT distinct      contacts.first_name,     
     contacts.last_name,     
     es_einsaetze.art 
    FROM     contacts
    LEFT JOIN es_einsaetze_contacts_c ON es_einsaetze_contacts_c.es_einsaetze_contactscontacts_ida = contacts.id
    LEFT JOIN es_einsaetze ON es_einsaetze.id = es_einsaetze_contacts_c.es_einsaetze_contactses_einsaetze_idb
    WHERE es_einsaetze.art = "uebung"


    Ausgabe


    In der contacts tabelle gibt es folgende namen

    [TABLE='class: ajax pma_table']

    [tr]


    [TH='class: draggable column_heading pointer marker']first_name[/TH]
    [TH='class: draggable column_heading pointer marker']last_name[/TH]

    [/tr]


    [TR='class: odd']
    [TD='class: data']Test 1[/TD]
    [TD='class: data']Test 1[/TD]
    [/TR]
    [TR='class: even']
    [TD='class: data']Test 2[/TD]
    [TD='class: data']Test 2[/TD]
    [/TR]
    [TR='class: odd']
    [TD='class: data']Test 3[/TD]
    [TD='class: data']Test 3[/TD]
    [/TR]

    [tr]


    [TD='class: data odd']Test 4[/TD]
    [TD='class: data odd']Test 4[/TD]

    [/tr][tr]


    [TD='class: data odd']Test 5[/TD]
    [TD='class: data odd']Test 5[/TD]

    [/tr]


    [/TABLE]

    Ich bräuchte jetzt quasi eine Abfrage die ich in meine Abfrage einbauen kann das mir die namen des Abfrage Ergebnisses mit der Tabelle COntacts vergleicht und alle namen die in meinem Abfrageergebniss nciht vorhanden sind ausgiebt.

    Sollte dann so aussehen:
    [TABLE='class: ajax pma_table']

    [tr]


    [TH='class: draggable column_heading pointer marker']first_name[/TH]
    [TH='class: draggable column_heading pointer marker']last_name[/TH]

    [/tr]


    [TR='class: odd']
    [TD='class: data']Test 4[/TD]
    [TD='class: data']Test 4[/TD]
    [/TR]
    [TR='class: even']
    [TD='class: data']Test 5[/TD]
    [TD='class: data']Test 5[/TD]
    [/TR]
    [/TABLE]


    Ich könnte auch mit der contact ID (es_einsaetze_contacts_c.es_einsaetze_contactscontacts_ida = contacts.id) arbeiten wenn es einfacher ist nur einen Wert zu vergleichen.

    3 Mal editiert, zuletzt von Pimmal (19. August 2014 um 11:16)