Announcement

Collapse
No announcement yet.

Zu einem Datensatz in Tabelle 1 herausfinden ob ein DAtensatz in Tabelle 2 existiert

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

  • Zu einem Datensatz in Tabelle 1 herausfinden ob ein DAtensatz in Tabelle 2 existiert

    Hallo Zusammen,
    ich stehe derzeit aufm schlauch une bekomme folgende Problematik nicht in ein SQL-Statement umgeformt:

    Ich habe 2 Tabellen, Tabelle1 und Tabelle 2.
    Fremdschlüssel in Tabelle 2 aus Tabelle 1 ist das Feld "KNR"

    Ich will nun in einem Select alle Felder aus Tabelle 1 - und zusätzlich eine spalte im Result in dem nur ein Indikator (true/false) steht ob es zu der KNR die in Tabelle 1 steht eine Zeile in Tabelle 2 gibt oder nicht.

    es sei dazugesagt das es in Tabelle 2 auch mehrere Datensätze zu einer KNR geben kann, das wäre mir egal, ich brauche nur ein ja oder ein nein, wieviele ist mir wurscht.

    mein Gedanke war ein LEFT JOIN, der liefert mir dann aber im result nicht mehr eine zeile pro Datensatz in Tabelle 1 - sondern mehrere Zeilen, nämlich immer wenn es in TAbelle 2 mehrere Datensätze bekam hatte ich auch mehrere im Result

    ich glaub ich seh den Wald vor lauter bäumen nicht.

    mfg
    Supervisor99

  • #2
    Hi,

    um dir mal eine Idee für einen Ansatz zu geben. Schau dir mal Folgendes an:

    http://dev.mysql.com/doc/refman/5.1/...ubqueries.html
    "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

    Viele Grüße Novi

    Comment


    • #3
      Danke für den Ansatz.
      Leider ahbe ich damit ein problem weil ich ja nicht die menge meiner Ergebnisse in Tabelle 1 einschränken will (where exists) sondern ich will zu jedem Datensatz wissen ob es dazu keinen oder mehrere datensätze in einer anderen tabelle gibt.

      Ich habe nun einen Ansatz entdeckt der relativ einfach ist und auch soweit geht: ein Subselect, also?
      select tabelle1.*, (select count(*) from tabelle2 where [bedingung auf tabelle1])
      from tabelle1 where [bedingungen]

      das liefert mir dann eine aussage wieveiel, bzw ob in der zweiten Tabelle Datensätze drin sind (nur dann muss meine PHP-Seite ein Logo einblenden).

      Mir kommt diese Lösung aber sehr langsam bzw resourcenverschwendend vor - ist dem so? oder ist das der weg der zu gehen ist?

      Supervisor

      Comment


      • #4
        Originally posted by supervisor99 View Post
        select tabelle1.*, (select count(*) from tabelle2 where [bedingung auf tabelle1])
        from tabelle1 where [bedingungen]

        Mir kommt diese Lösung aber sehr langsam bzw resourcenverschwendend vor - ist dem so? oder ist das der weg der zu gehen ist?
        Unter Umständen lässt sich die Abfrage mit EXITSTS optimieren, da MySQL glaube ich so "schlau" ist, dass es nach dem ersten Treffer aufhört zu suchen:

        [highlight=sql]
        SELECT * , EXISTS (SELECT * from tabelle2 b where a.id=b.id) FROM tabelle1 a
        [/highlight]

        Es ist eigentlich die selbe Abfrage mit der Ausnahme, dass nicht alle Einträge gezählt werden, sonder nur geprüft wird, ob ein Eintrag exisitert. Die Rückgabewerte sind 0 bzw. 1, was du leicht in einen Boolean casten kannst.
        "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

        Viele Grüße Novi

        Comment


        • #5
          Hallo,
          Originally posted by supervisor99 View Post
          ...mein Gedanke war ein LEFT JOIN, der liefert mir dann aber im result nicht mehr eine zeile pro Datensatz in Tabelle 1 - sondern mehrere Zeilen, nämlich immer wenn es in TAbelle 2 mehrere Datensätze bekam hatte ich auch mehrere im Result
          Dieser Ansatz ist nach meiner Auffassung der Richtigere und einer Lösung mit Subselect in der Select-Klausel vorzuziehen. Wenn nur Spalten aus Tabelle A ausgewählt und nur auf diese Gruppiert wird, gibt es auch keine Probleme mit "doppelten" Datensätzen.

          [highlight=sql]
          select a.feld1, a. feld2, ... count(b.*) flag
          from tabelle1 a
          left join tabelle2 b on b.id = a.id
          group by a.feld1, a. feld2, ...
          [/highlight]

          Gruß Falk
          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

          Working...
          X