Gast freescale Geschrieben 29. August 2006 Geschrieben 29. August 2006 Hallo Leute, ich habe hier folgende Tabellenstruktur: a_NameToId - ItemId int - Name varchar b_IdToTime - TimeId int - ItemId int - DateAndTime timestamp c_TimeIdToData - TimeId int - Code varchar - Info varchar meine bisherige Query ist: SELECT c.TimeId, c.Code FROM c_TimeIdToData AS c LEFT JOIN b_IdToTime AS b ON b.TimeId = c.TimeId LEFT JOIN a_NameToId AS a ON a.ItemId = b.ItemId WHERE a.Name = "Katze" AND (c.TimeId = 5 OR c.TimeId = 1) Die Ausgabe hiervon ist dann auch... 1;"AA" 1;"CC" 1;"DD" 1;"FF" 5;"AA" 5;"CC" 5;"EE" nun möchte ich die Query aber so ändern, dass ich - die Elemente angezeigt bekomme, welche unter beiden IDs zu finden sind - nur die Elemente sehe, welche in 5 vorkommen, aber NICHT in 1 - und umgekehrt. Hat jemand von euch eine Idee wie ich das realisieren könnte? :ka: Oder, .. noch genialer wäre, ein Feld "Vorkommen" welches bei zwei treffern 0 ist, bei einem in "1" -1 ist und bei nur in "5" +1 wäre.. :ka: also, um bei dem Beispiel zu bleiben: "AA";0 (gleich) "CC";0 (gleich) "DD";-1 (weggefallen) "EE";1 (neu) "FF";1 (neu) Zitieren
Gast freescale Geschrieben 29. August 2006 Geschrieben 29. August 2006 Hmm hab es doch auch allein geschafft. :-) Falls es jemanden interessiert, hier meine Lösung: SET @oldId = 1; SET @newId = 5; SET @name = "Katze"; SELECT c.Code, NOT EXISTS ( SELECT * FROM c_TimeIdToData AS c2 WHERE c2.TimeId = @oldId AND c2.Code = c.Code ) AS compare_IsNew, NOT EXISTS ( SELECT * FROM c_TimeIdToData AS c2 WHERE c2.TimeId = @newId AND c2.Code = c.Code ) AS compare_IsDropped FROM c_TimeIdToData AS c LEFT JOIN b_IdToTime AS b ON b.TimeId = c.TimeId LEFT JOIN a_NameToId AS a ON a.ItemId = b.ItemId WHERE a.Name = @name AND ( c.TimeId = @oldId OR c.TimeId = @newId ) GROUP BY c.Code; Code;compare_isNew;compare_isDropped "AA";0;0 "BB";1;0 "CC";0;0 "DD";0;1 "EE";1;0 "FF";0;1 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.