Announcement

Collapse
No announcement yet.

Doppelte Einträge in einer View

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Doppelte Einträge in einer View

    Hallo zusammen,
    meine Datenbank die mir Probleme bereitet ist wie folgt aufgebaut:
    es gibt 3 Tabellen.
    1. Tabelle1 = Kontaktdaten
    3. Projektinfos = Auflistung aller Projekte
    3. Projekte = Verknüpfung der Projekte und Kontaktdaten
    ich habe folgendes Problem:

    Wenn ich ein normales SELECT in einer Tabelle Projekte ausführe nach der ID (Primärschlüssel) und der Projektnummer bekomme ich richtigerweise ein Ergebnis.

    Führe ich die identische Abfrage auf die View aus, welche unter anderen aus der Tabelle1 und der Projekte Tabelle besteht, erhalte ich 2 Ergebnisse.

    Leider weiß ich nicht warum, erkennt da jemand einen Fehler? Oder hat jemand eine Idee wie ich das Problem lösen könnte?

    P.s.: Ein Distinct nützt leider nicht. Sowie ein Distinctrow, da es nicht unterstützt wird glaube ich.

    Vielen Dank im Voraus

    LG xXSpikeXx

  • #2
    Originally posted by xXSpikeXx View Post

    Führe ich die identische Abfrage auf die View aus, welche unter anderen aus der Tabelle1 und der Projekte Tabelle besteht, erhalte ich 2 Ergebnisse.

    Leider weiß ich nicht warum, erkennt da jemand einen Fehler? Oder hat jemand eine Idee wie ich das Problem lösen könnte?

    Meine Glaskugel hat Urlaub, Pech für Dich. Bis sie zurück ist schaust bitte in die Definition des Views, und zwar selber.

    Comment


    • #3
      Wenn ich das nicht getan hätte würde ich die Frage nicht hier posten...

      Kann man der View nicht eventuell auch einen eigenen Primärschlüssel geben?!

      Comment


      • #4
        Also wenn es sich um eine normale View handelt ist das erstmal nichts anderes als ein SELECT was in der Datenbank gespeichert ist. Schau Dir doch mal an wie die View berechnet wird, dann wird Dir vielleicht auch klar warum das Ergebnis so herauskommt wie Du es siehst. Du kannst auch das SELECT von dem View nehmen und damit ein bischen rumspielen. Führe z.b. erstmal kleinere eigenständige Teile davon aus und versuche zu verstehen warum wo was wie gemacht wird. Vielleicht ist ja in der View auch ein Bug der so gar nicht sein sollte. Eine View hat per Definition keinen Primärschlüssel, weil sie einfach nur eine Abfrage ist.

        Comment


        • #5
          Wenn der Datensatz komplett identisch ist (ich selecte mit dem '*' Operator) verstehe ich nicht warum der doppelt sein sollte, egal wie die View aufgebaut ist.
          Aber ich versuche mich mal durch zu beißen.

          Vielen Dank erstmal.

          Comment


          • #6
            Originally posted by xXSpikeXx View Post
            Wenn der Datensatz komplett identisch ist (ich selecte mit dem '*' Operator) verstehe ich nicht warum der doppelt sein sollte, egal wie die View aufgebaut ist.
            Kann ich Dir zeigen:

            Code:
            privat=*# create table muell( t text);
            CREATE TABLE
            Time: 150,424 ms
            privat=*# insert into muell values ('bullshit');
            INSERT 0 1
            Time: 0,322 ms
            privat=*# create view view_muell as select * from muell union all select * from muell;
            CREATE VIEW
            Time: 16,312 ms
            privat=*# select * from view_muell ;
                t
            ----------
             bullshit
             bullshit
            (2 rows)
            Gibt sicher noch weitere Lösungswege.

            Comment


            • #7
              Ein seltsamer JOIN würde mir spontan einfallen

              Comment


              • #8
                Originally posted by xXSpikeXx View Post
                Führe ich die identische Abfrage auf die View aus, welche unter anderen aus der Tabelle1 und der Projekte Tabelle besteht, erhalte ich 2 Ergebnisse.
                Ohne das SQL Statement kann man nur Vermutungen anstellen. Ich bin hier über das "unter anderem " gestolpert (und das 2 Ergebnisse*).

                Wenn weitere Tabellen oder Views eingebunden sind, ist es problemlos möglich, dass sich das "Ergebnis" verdoppelt. Ein Beispiel hast Du schon bekommen.
                Eine eingebundene Tabelle ohne Join wäre auch dazu in der Lage soetwas hervorzurufen. Zunächst und offensichtlich eine Tabelle mit 2 Datensätzen, dieser Gedanke kann aber auch irreführend sein, wenn die Tabelle zwar nicht gejoint, aber direkt oder indirekt mit Where Kriterien eingeschränkt ist.

                Wie wärs mit dem Statement?
                Gruß, defo

                Comment


                • #9
                  Originally posted by xXSpikeXx View Post
                  Wenn ich ein normales SELECT in einer Tabelle Projekte ausführe nach der ID (Primärschlüssel) und der Projektnummer bekomme ich richtigerweise ein Ergebnis.

                  Führe ich die identische Abfrage auf die View aus, welche unter anderen aus der Tabelle1 und der Projekte Tabelle besteht, erhalte ich 2 Ergebnisse.
                  Liebe Werkstatt, wenn ich alleine mit meinem Auto fahre, dann ist alles OK und ich komme dort an wo ich hin will. Fahre ich jedoch mit dem Auto meiner Frau (hat exakt die gleiche Farbe) und nehme noch 3 Leute mit, dann ist das Fahrgefühl ganz anders und der Spritverbrauch doppelt so hoch. Könnt ihr mir bitte sagen was kaputt ist!


                  [IRONIE OFF]
                  Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                  Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                  Comment


                  • #10
                    Ist doch Logisch:

                    Führe ich die identische Abfrage auf die View aus, welche unter anderen aus der Tabelle1 und der Projekte Tabelle besteht, erhalte ich 2 Ergebnisse.
                    Dann stehen in der Tabelle Kontaktdaten 2 oder mehr Kontakte pro Projekt. Die View wirft logischer weise mehrmals die "Projekt ID" aus.

                    Das gleiche SQL-Statement das auf der Projekt 1 ergebnis auswirft , wirft da dann soviele aus wie es Kontaktdaten gibt....

                    Comment


                    • #11
                      Sowohl der Kontakt, sowie der Projekteintrag ist nur ein mal vorhanden.
                      Anhand der identischen Projekt_ID und der Kontakt_ID kann man das 100%ig fest machen.


                      so sehen die joins aus:

                      dbo.Projekte INNER JOIN
                      dbo.Projektinfos ON dbo.Projekte.Projektnummer = dbo.Projektinfos.Projektnummer INNER JOIN
                      dbo.Tabelle1 ON dbo.Projekte.Kontakt_ID = dbo.Tabelle1.ID LEFT OUTER JOIN
                      dbo.opengeodb_plz ON dbo.Tabelle1.PLZ = dbo.opengeodb_plz.PLZ LEFT OUTER JOIN
                      dbo.Kontakthistorie ON dbo.Projekte.Projekt_ID = dbo.Kontakthistorie.FKEY_Projekt_ID

                      Das Statement sieht folgerndermaßen aus:

                      Code:
                      SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY Ort DESC,Strasse DESC,Nachname DESC) as row FROM View_Projekte Where ID > 1 AND ID like '%7000144%' AND COALESCE(Status,'') != 'Generell keine Teilnahme'  AND COALESCE(Status,'') != 'Ruhestand/Verstorben'  AND COALESCE(Status,'') != 'Nicht mehr dort tätig' AND COALESCE(Status,'') != 'Praxis geschlossen' AND Projektnummer = 'JC_06-14' AND (CONVERT(VARCHAR(10),[Teilnahme_Datum_Zeit], 102) = '13.06.2014' AND Teilnahme = 'Wiedervorlage' OR Teilnahme like 'Wiedervorlage' OR Teilnahme like 'hat Interesse' OR Teilnahme like 'meldet sich' OR Teilnahme like 'Urlaub bis' OR Teilnahme like 'Teilnahme am' OR Teilnahme like 'Teilgenommen am' OR Teilnahme like 'Screening OK' OR len(COALESCE(Teilnahme,'')) < 4)  ) a WHERE row > 0 and row < 16

                      Comment


                      • #12
                        Abgesehen davon, dass ich das Statement irgendwie gruselig finde, kann ich nicht viel dazu sagen.
                        Kommt auf die Daten an, die rein kommen, also aus dem View kommen.
                        Die Joins dazu sind bedingt hilfreich, weil es keine Aussage darüber gibt, welche Inhalte bzw. Schlüssel Constraints vorliegen und auch Aggregierung nicht daraus hervorgeht.
                        Gruß, defo

                        Comment


                        • #13
                          Originally posted by defo View Post
                          Abgesehen davon, dass ich das Statement irgendwie gruselig finde, kann ich nicht viel dazu sagen.
                          Kommt auf die Daten an, die rein kommen, also aus dem View kommen.
                          Die Joins dazu sind bedingt hilfreich, weil es keine Aussage darüber gibt, welche Inhalte bzw. Schlüssel Constraints vorliegen und auch Aggregierung nicht daraus hervorgeht.
                          LOL Gruselig trifft's irgendwie ... Und auch die Aussage über die Daten Stimmt. Ich würd mich sogar wundern, wenn Projekt ID in der View eindeutig wäre - ist ja der Klassiker für 1:N beziehungen - Projekt -> Projekt-Kontakte usw.

                          Manchmal wüsste man halt allzugerne wofür das am ende Gut sein soll... 100% geht ander und gaanz einfach

                          Comment

                          Working...
                          X