Jump to content
Melde dich an, um diesen Inhalt zu abonnieren  
whoami

SQL Datenbank Suche

Empfohlene Beiträge

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 von whoami

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 :)

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 :/

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Irgendwie so in der Art:

 

SELECT A1.ID, T1.Abo FROM (SELECT DISTINCT T1.ID, "RT" AS AboRT FROM T1) AS A1
LEFT JOIN T1 ON (A1.AboRT = T1.Abo) AND (A1.ID = T1.ID)
WHERE ((T1.Abo) Is Null)
 

bearbeitet von Cybquest

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Msg 207, Level 16, State 1, Line 1
Invalid column name 'RT'.
 

 

:/

 

RT ist doch gar kein column, ist doch ein eintrag von ABO

bearbeitet von whoami

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 von Cybquest

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

... 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...

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
Melde dich an, um diesen Inhalt zu abonnieren  

×