whoami 0 Geschrieben 21. Oktober 2014 Melden Teilen Geschrieben 21. Oktober 2014 (bearbeitet) Hallo, Ich hänge gerade dabei, eine Datenbank zu Sortieren. Aufbau der Tabelle die ich Sortieren will: ID USER ABO .... Nun gibt es jede id mehrfach, z.b ID USER ABO 1 test1 RT 1 test1 AG 1 test1 AG 2 test2 AG 3 test3 RT 3 test3 AG ..... Nun will ich folgenes ausgegeben haben: Jede ID muss ein Abo RT und AG haben, wobei AG mehrfach vorkommen kann. ausgegeben werden sollen ALLE Id´s wo es zwar AG´s gibt aber keine RT wie hier bei ID 2 der fall... Und das ganze soll nur die Datensätze der letzten 7 tage anzeigen wie kann man das am besten umsetzen? Habe mir gedacht eine 2 Tabelle anzulegen hilft evtl. so das ich: INSERT INTO `TABELLE_NEW` (ID, USER, ABO)SELECT `ID`, `USER`, `ABO` FROM `TABELLE1`WHERE (DATA) > 2014-04-14 00:00:00.000 nur weiß ich nicht weiter :/ bearbeitet 21. Oktober 2014 von whoami Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 21. Oktober 2014 Melden Teilen Geschrieben 21. Oktober 2014 Moin, zunächst mal ist deine Tabelle offenkundig nicht normalisiert. Das macht den Umgang damit unnötig kompliziert. Dann: Wenn du nach Datum filtern möchtest, muss es natürlich in jeder Zeile auch ein Datumsfeld geben. Ist das gegeben? Und schließlich musst du mit einer verschachtelten Abfrage arbeiten, auch "Sub-Select" genannt. Mit dem ersten Select identifizierst du alle IDs, für die ein Eintrag "AG" existiert und mit dem zweiten davon dann diejenigen, die kein "RT" haben. Die Klausel "NOT IN" sollte dir dabei helfen (zeige mir nur diejenigen aus Abfrage 1, die in Abfrage 2 nicht auftauchen). Gruß, Nils Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 21. Oktober 2014 Melden Teilen Geschrieben 21. Oktober 2014 Wenns nur um die geht, die kein RT haben, wäre folgendes möglich: Mit Distinct die ID eindeutig ziehen und dann mit nem Left Join nur die Datensätze mit RT verknüpfen und das ganze dann auf NULL abfragen... ... und zum "DATA": Siehe Nils' Hinweis :) Zitieren Link zu diesem Kommentar
whoami 0 Geschrieben 21. Oktober 2014 Autor Melden Teilen Geschrieben 21. Oktober 2014 Feld DATA ist gegeben ja. vor dem Feld ID gibt es noch ein Feld mit namen UID, diese ist pro zeile einmalig also die eindeutige ID nur wie ich mir jetzt das so ausgeben kann ist mir noch nicht ganz klar :/ Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 21. Oktober 2014 Melden Teilen Geschrieben 21. Oktober 2014 (bearbeitet) Irgendwie so in der Art: SELECT A1.ID, T1.Abo FROM (SELECT DISTINCT T1.ID, "RT" AS AboRT FROM T1) AS A1LEFT JOIN T1 ON (A1.AboRT = T1.Abo) AND (A1.ID = T1.ID)WHERE ((T1.Abo) Is Null) bearbeitet 21. Oktober 2014 von Cybquest Zitieren Link zu diesem Kommentar
whoami 0 Geschrieben 22. Oktober 2014 Autor Melden Teilen Geschrieben 22. Oktober 2014 hätte vieleicht dazu schreiben sollen, das alles in einer Tabelle ist Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 22. Oktober 2014 Melden Teilen Geschrieben 22. Oktober 2014 Ja... und? Der Select, den ich da geschrieben hab, holt auch nur Daten aus einer Tabelle (hab ich halt nur T1 genannt). A1 ist ein Subselect auf T1. Zitieren Link zu diesem Kommentar
whoami 0 Geschrieben 22. Oktober 2014 Autor Melden Teilen Geschrieben 22. Oktober 2014 (bearbeitet) Msg 207, Level 16, State 1, Line 1Invalid column name 'RT'. :/ RT ist doch gar kein column, ist doch ein eintrag von ABO bearbeitet 22. Oktober 2014 von whoami Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 22. Oktober 2014 Melden Teilen Geschrieben 22. Oktober 2014 Moin, ersetze die beiden Anführungsstriche mal durch Apostrophe (das Zeichen über der #-Taste, nicht den Akzent). Gruß, Nils Zitieren Link zu diesem Kommentar
whoami 0 Geschrieben 22. Oktober 2014 Autor Melden Teilen Geschrieben 22. Oktober 2014 hab ich gerade, ging - nun guck ich gerade warum er mir genau 1 ergebnis zeigt und da ist ABO = NULL also weder RT noch AG also auch so nen fehler gefunden :) aber sonst zeigt er die anderen nicht an und es gibt definitiv welche Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 22. Oktober 2014 Melden Teilen Geschrieben 22. Oktober 2014 (bearbeitet) In Deinen Testdaten hat ja nur die ID 2 keinen RT-Eintrag. D.h. die Abfrage liefert genau einen Datensatz mit ID 2 und ABO = NULL... War das nicht das, was rauskommen sollte? Die IDs, die keinen RT-Eintrag haben? ... und wenn dich das ABO=NULL stört, lass es einfach weg ;) (SELECT A1.ID FROM...) bearbeitet 22. Oktober 2014 von Cybquest Zitieren Link zu diesem Kommentar
whoami 0 Geschrieben 22. Oktober 2014 Autor Melden Teilen Geschrieben 22. Oktober 2014 Ja, Testdaten sind ja nur ein paar, gibt hunderte id´s und jede ID MUSS AG und RT haben AG kann jede ID 5 oder what ever haben RT (SOLLTE) sie genau 1x haben wenn aber bei einer ID keine RT Existiert sprich AG ist da aber RT fehlt soll diese ID ausgegeben werden. RT gibt es in dem fall nicht also auch kein Leeres Feld es Existiert einfach kein eintrag in der Datenbank Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 22. Oktober 2014 Melden Teilen Geschrieben 22. Oktober 2014 ... und was ist jetzt noch Dein Problem? Die Abfrage spuckt IDs aus, die keine RTs haben aber auf Grund anderer ABO-Einträge (vermutlich dann immer AG) überhaupt existieren... Es geht doch nur um IDs, die kein RT haben, oder nicht? Dass ein NULL-Feld dabei raus kommt, wenn Du die ABO-Spalte mit anzeigen lässt, liegt am LEFT JOIN... das heisst ja nicht, dass es dafür einen Datensatz in der Tabelle geben müsste. Entweder versteh ich Dein Problem nicht, oder Du die Lösung nicht... Zitieren Link zu diesem Kommentar
whoami 0 Geschrieben 22. Oktober 2014 Autor Melden Teilen Geschrieben 22. Oktober 2014 ah mein fehler. und wie mann ich mir in der ausgabe zusätzlich auch die user felder auslesen? wenn ich am anfang select * mache bekomme ich bei dem Feld User auch NULL zurück Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 22. Oktober 2014 Melden Teilen Geschrieben 22. Oktober 2014 Moin, hm, wird wohl mal Zeit für einen SQL-Grundkurs, oder? SELECT A1.ID, A1.User, T1.Abo FROM ... sollte ausreichen. Gruß, Nils Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.