Announcement

Collapse
No announcement yet.

SELECT ... AND ... OR - Problem

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

  • SELECT ... AND ... OR - Problem

    Moin liege Entwickler-Forum-Gemeinde,

    ich habe hier eine komplizierte SQL-Abfrage:

    [highlight=sql]SELECT tbl_tuer.* FROM tbl_tuer
    LEFT JOIN tbl_tuer_kante ON tbl_tuer_kante.fstuer = tbl_tuer.id
    LEFT JOIN tbl_tuer_typ ON tbl_tuer_typ.fstuer = tbl_tuer.id
    WHERE (tbl_tuer_kante.fskante = 1 OR tbl_tuer_kante.fskante = 2)
    AND (tbl_tuer_typ.fstyp = 1)
    [/highlight]

    Mit dieser Abfrage wird mir eine Liste an Türen zurückgegeben, die den Kriterien entspricht. In diesem Fall TYP=1 und KANTE=1 oder KANTE=2.
    Soweit kein Problem.

    Was ich aber erreichen möchte:
    Alle Türen, die vom TYP=1 sind und die sowohl KANTE=1 als auch KANTE=2 haben (in meinem Beispiel müsste somit nur die Tür mit der id 433 herauskommen).

    Meine Tabellen:

    tbl_tuer_kante
    id* fstuer fskante
    1 433 1
    2 433 2
    3 367 1
    4 154 2

    tbl_tuer_typ
    id* fstuer fstyp
    1 433 1
    2 367 2
    3 154 1

    tbl_kante
    id* bezeichnung
    1 rund
    2 eckig

    tbl_typ
    id* bezeichnung
    1 zimmertür
    2 glastür

    Kann mir jemand auf die Sprünge helfen? Komme an der Stelle nicht weiter.

    Grüße,
    Nuern
    Zuletzt editiert von Nuern; 02.02.2011, 17:05.

  • #2
    denke eher so
    [HIGHLIGHT="SQL"] (tbl_tuer_typ.fstyp = 1 AND tbl_tuer_kante.fskante = 1)
    OR (tbl_tuer_typ.fstyp = 1 AND tbl_tuer_kante.fskante = 2)
    [/HIGHLIGHT]

    PS Formatierung von SQL in Beiträgen

    Comment


    • #3
      Originally posted by ebis View Post
      denke eher so
      [HIGHLIGHT="SQL"] (tbl_tuer_typ.fstyp = 1 AND tbl_tuer_kante.fskante = 1)
      OR (tbl_tuer_typ.fstyp = 1 AND tbl_tuer_kante.fskante = 2)
      [/HIGHLIGHT]
      *gg* Wenn du dass nach logischen Regeln zusammenfasst kommst du auf die originale Bedingung

      Für dieses Problem gibt es zwei Lösungsansätze. Ersteren mit zwei Subqueries und den zweiten mittels Gruppierung und Having.
      Ähnliche Fragen gab es auch schon zu Genüge, über die Suche sollte sich also was finden lassen.

      Gruss 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


      • #4
        Hallo,

        Lösung mit Subquery:

        [highlight=sql]
        SELECT tbl_tuer.*
        FROM tbl_tuer
        LEFT JOIN tbl_tuer_typ ON tbl_tuer_typ.fstuer = tbl_tuer.id
        WHERE tbl_tuer_typ.fstyp = 1
        and tbl_tuer.id in (
        select fstuer
        from tbl_tuer_kante
        where fskante = 1
        )
        and tbl_tuer.id in (
        select fstuer
        from tbl_tuer_kante
        where fskante = 2
        )
        [/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