Announcement

Collapse
No announcement yet.

"Negatives" SQL

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

  • "Negatives" SQL

    Hallo Leute!
    Ich such für folgendes Problem auf dem Interbase 6 eine Lösung:
    In einer Master/Detail-Beziehung gibt es Hauptdatensätze, denen kein Detaildatensatz zugeordnet ist. Wie kann man sich nun über ein Select-Statement alle Hauptdatensätze anzeigen (ausgeben) lassen, die KEINEN Detaildatensatz haben?

    mfg
    Udo

  • #2
    Hallo Udo,<br><br>
    mit z.B.:
    <pre>
    select * from master m where not exists (select 1 from detail where master.id=detail.master_id)
    </pre>
    Schöne Grüße,<br>
    Thoma
    Thomas Steinmaurer

    Firebird Foundation Committee Member
    Upscene Productions - Database Tools for Developers
    Mein Blog

    Comment


    • #3
      Udo,
      <br>
      etwa so:<br>
      <br>
      Select * from TabMaster where MasterID NOT IN (SELECT DISTINCT MasterID FROM tabDetail)<br>
      <br>
      Floria

      Comment


      • #4
        Hallo Florian,<br><br>
        vorsicht bei der Verwendung von <b>IN</b> bei einer großen Tabelle <b>TabMaster</b>, da das Subselect für jeden Datensatz ausgeführt wird. Da kannst Du Dir erhebliche Performanceprobleme einhandeln, darum auch das Beispiel mit <b>NOT EXISTS</b>.<br><br>
        Schöne Grüße,<br>
        Thoma
        Thomas Steinmaurer

        Firebird Foundation Committee Member
        Upscene Productions - Database Tools for Developers
        Mein Blog

        Comment


        • #5
          Hallo Thomas,

          vielen Dank für den Tipp. Manchmal sieht man ja den Wald vor lauter Bäumen nicht. Hintergrund war natürlich eine anstehende Datenbereinigung.
          Funktioniert auch prima mit mehreren Detailtabellen!!

          select * from Master m
          where<Br>
          not exists (select Feld from Detail1 d1 where m.lfdnr = d1.lfdnr) and<Br>
          not exists (select Feld from Detail2 d2 where m.lfdnr = d2.lfdnr)<Br>
          usw.

          Gruß Ud

          Comment

          Working...
          X