Karin: Zu blöd für SQL

Hallo Leute,

ich bin wohl echt zu blöd:

Ich habe 2 Tabellen:

all_sids beinhaltet alle sid's mit den Daten.
items_uids verknüpft die uid's mit den sid's - wobei das Feld item die sid beinhaltet und es einen type gibt, der "st" sein muß.

Ich möchte nun alle Verknüpfungen haben, die nicht mehr in den all_sids stehen.

SELECT * FROM sids_uids WHERE type = 'st' and item not in (SELECT sid from all_sids)

Ich habe einen konkreten Fall in meiner Datenbank und es sollte also MINDESTENS 1 Eintrag rauskommen, aber es stellt immer nur "Kein Eintrag gefunden" da.

Ist wahrscheinlich eine Kleinigkeit, die ich nciht beachtet hab, aber bin echt am Verzweifeln

  1. Hallo Karin,

    all_sids beinhaltet alle sid's mit den Daten.
    items_uids verknüpft die uid's mit den sid's - wobei das Feld item die sid beinhaltet und es einen type gibt, der "st" sein muß.

    Ich möchte nun alle Verknüpfungen haben, die nicht mehr in den all_sids stehen.

    SELECT * FROM sids_uids WHERE type = 'st' and item not in (SELECT sid from all_sids)

    sieht in Ordnung aus.

    Ich habe einen konkreten Fall in meiner Datenbank und es sollte also MINDESTENS 1 Eintrag rauskommen, aber es stellt immer nur "Kein Eintrag gefunden" da.

    Prüfe den konkreten Fall auf beide Bedingungen:

    SELECT  
        item,  
        type  
    FROM  
        sid_uids  
    WHERE  
        <Bedingung für den Dir bekannten Datensatz>  
    
    

    und

    SELECT  
        sid  
    FROM  
        all_sids  
    WHERE  
        sid = <item aus voriger Abfrage>
    

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz,

      ähm, ich kenne derzeit NUR den einen Fall, aber bei unseren derzeit 1.000 sids und knapp 7.000 Verknüpfungen wird das etwas langwierig ...

      Klar, ich könnte ein Programm schreiben, in dem ich ZUERST einen SELECT auf all_sids mache, über das Ergebnis loope und alle sids mit , trenne.

      Diesen neuen String dann in die eigentliche Abfrage einbauen, statt dem zweiten SELECT, aber das müßte doch EIGENTLICH eine ganz simple Abfrage sein - wenn ich bedenke, was man SONST noch so alles mit SQL an Auswertungen und Selects und was auch immer ausführen kann, wo der Befehl alleine über ne halbe Seite geht.

      Aber trotzdem danke, vielelicht weiß ja noch jemand anderes eine Lösung

      1. Hallo Karin,

        ähm, ich kenne derzeit NUR den einen Fall, aber bei unseren derzeit 1.000 sids und knapp 7.000 Verknüpfungen wird das etwas langwierig ...

        Du kennst einen Fall: Bitte überprüfe dessen Daten. Wenn Deine Abfrage diesen Datensatz nicht liefert, dann ist es kein Fall.

        Deine Abfrage ist gemäß Deiner Problembeschreibung absolut korrekt. Vergleichbare hab' ich schon genug abgesetzt :-)

        Wenn Deine Abfrage den Dir bekannten Datensatz *nicht* zurückliefert, dann muss meiner Meinung nach dieser Datensatz eben *kein* Spezialfall sein, d.h.
        entweder ist der Wert in der Spalte type nicht 'st' oder der Wert in item taucht doch in Deiner zweiten Tabelle auf.

        Bitte prüfe daher genau diesen Dir bekannten Fall auf diese zwei Bedingungen. Einzeln.

        Freundliche Grüße

        Vinzenz

        1. Hallo Karin,

          »» ähm, ich kenne derzeit NUR den einen Fall, aber bei unseren derzeit 1.000 sids und knapp 7.000 Verknüpfungen wird das etwas langwierig ...

          Du kennst einen Fall: Bitte überprüfe dessen Daten. Wenn Deine Abfrage diesen Datensatz nicht liefert, dann ist es kein Fall.

          Deine Abfrage ist gemäß Deiner Problembeschreibung absolut korrekt. Vergleichbare hab' ich schon genug abgesetzt :-)

          Wenn Deine Abfrage den Dir bekannten Datensatz *nicht* zurückliefert, dann muss meiner Meinung nach dieser Datensatz eben *kein* Spezialfall sein, d.h.
          entweder ist der Wert in der Spalte type nicht 'st' oder der Wert in item taucht doch in Deiner zweiten Tabelle auf.

          Bitte prüfe daher genau diesen Dir bekannten Fall auf diese zwei Bedingungen. Einzeln.

          Freundliche Grüße

          Vinzenz

          Das hast du mich falsch verstanden - dieser Fall IST ein RICHTIGER FALL - es könnte nur mittlerweile hunderte geben und jede SID per Hand auszuwerten - und das in absehbarerzeit wieder zutun - ist schwachsinnig. Deswegen soll ich einen View schreiben, der mir das so selectiert.

          Aber scheinbar habe ich doch alles richtig gemacht, danke. Ich werds mir nochmal genau angucken.

          Ich habe den Verdacht, daß es nicht geht, weil es im einen SID und im anderen ITEM heißt. (In ITEMS können zukünftig auf andere IDS (abhängig von ype) stehen)

          MFG Karin

          1. Hallo,

            » Wenn Deine Abfrage den Dir bekannten Datensatz *nicht* zurückliefert, dann muss meiner Meinung nach dieser Datensatz eben *kein* Spezialfall sein, d.h.
            » entweder ist der Wert in der Spalte type nicht 'st' oder der Wert in item taucht doch in Deiner zweiten Tabelle auf.

            » Bitte prüfe daher genau diesen Dir bekannten Fall auf diese zwei Bedingungen. Einzeln.

            Das hast du mich falsch verstanden - dieser Fall IST ein RICHTIGER FALL

            dann muss ihn die Logik:

            Gib mir die Datensätze,
                die in der Spalte einen bestimmten Wert haben
            und
                deren id nicht in der Liste von ids einer anderen Tabelle auftaucht

            falsch sein. Sorry, existierende SQL-Implementierungen machen nicht solch grundlegende Fehler. Wenn beide Bedingungen erfüllt sind, dann wird die Abfrage diesen Datensatz zurückliefern. Wenn die Abfrage keinen Datensatz zurückliefert, dann gibt es keinen Datensatz, der diese Bedingungen erfüllt.

            Eventuell schließen ihn weitere Bedingungen aus, die Du der Vereinfachung halber hier weggelassen hast. Ohne Deine Daten zu kennen, kann man Dir nicht weiterhelfen. Deine Abfrage ist völlig korrekt, was die von Dir geschilderte Logik betrifft.

            Freundliche Grüße

            Vinzenz

  2. moin,

    Ich habe 2 Tabellen:
    all_sids beinhaltet alle sid's mit den Daten.
    items_uids verknüpft die uid's mit den sid's - wobei das Feld item die sid beinhaltet und es einen type gibt, der "st" sein muß.

    wenn die beiden tabellen all_sides und item_uids heißen, wie kommt dann die tabelle sids_uids ins spiels und welche bedeutung hat sie ? oder habe ich da was falsch verstanden ?

    Ilja

    1. moin,

      »» Ich habe 2 Tabellen:
      »» all_sids beinhaltet alle sid's mit den Daten.
      »» items_uids verknüpft die uid's mit den sid's - wobei das Feld item die sid beinhaltet und es einen type gibt, der "st" sein muß.

      wenn die beiden tabellen all_sides und item_uids heißen, wie kommt dann die tabelle sids_uids ins spiels und welche bedeutung hat sie ? oder habe ich da was falsch verstanden ?

      Ilja

      Hi, ups, das war ein Tipfehler - die hieß bis vor kurzem noch so - jetzt heißt sie aber items_uids.
      sorry