Announcement

Collapse
No announcement yet.

Multiple Konditionen für 1 Feld (WHERE Clause)

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

  • Multiple Konditionen für 1 Feld (WHERE Clause)

    n'Sers!

    Die Abfrage

    SELECT a FROM table_name WHERE b IN (cond_a, cond_b, cond_c);

    Gibt mir jedes "a" aus, bei dem das "b" mindestens eines der Konditionen erfüllt.
    Ich brauche aber die Restriktion, dass es alle 3 Konditionen erfüllen muss.

    Wie mach ich das?

    Danke schonma

  • #2
    Originally posted by Kukeiko View Post
    ...Ich brauche aber die Restriktion, dass es alle 3 Konditionen erfüllen muss.

    Wie mach ich das?
    Gegenfrage: Wie meinst du das? Es kann KEIN b geben, das gleichzeitig alle drei Bedingungen erfüllt! Es kann höchstens eine MENGE an b's geben, die zusammen alle drei Bedingungen erfüllen.

    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


    • #3
      Meinst Du vielleicht alle as, für die es ein b mit allen drei Werten gibt?
      Dann geht das so:

      Select t1.a from table_name t1 where t1.b=cond_a
      And exists
      (select t2.b from table_name t2 where t1.a=t2.a and t2.b = cond_b)
      and exists
      (select t3.b from table_name t3 where t1.a=t3.a and t3.b = cond_c)


      Gruß
      docendo discimus

      Comment


      • #4
        Originally posted by Falk Prüfer View Post
        Gegenfrage: Wie meinst du das? Es kann KEIN b geben, das gleichzeitig alle drei Bedingungen erfüllt! Es kann höchstens eine MENGE an b's geben, die zusammen alle drei Bedingungen erfüllen.

        Gruß Falk
        Da hast du recht, ich hab mich ungenau ausgedrückt.

        Ich brauche eine Menge an b, die alle 3 Konditionen erfüllen und an ein gleiches a gekoppelt sind.

        Hab ein Screenshot von der Ausgabe des Queries im Startpost gemacht:
        SELECT item_id, attr_id FROM item_attr WHERE attr_id IN ( 50, 74 );
        liefert


        In meinem Wunschfall darf die Reihe mit der item_id "7" nich vorkommen.
        Hoffe, das ist verständlicher


        Originally posted by frauwue View Post
        Meinst Du vielleicht alle as, für die es ein b mit allen drei Werten gibt?
        Dann geht das so:

        Select t1.a from table_name t1 where t1.b=cond_a
        And exists
        (select t2.b from table_name t2 where t1.a=t2.a and t2.b = cond_b)
        and exists
        (select t3.b from table_name t3 where t1.a=t3.a and t3.b = cond_c)


        Gruß
        Ich versteh deinen Query nicht, was hat es mit dem tx nach dem table_name auf sich?
        Und sind in deinem Query abfragen über 3 Tabellen? Hab nur eine



        Danke für eure bisherige Hilfe

        Comment


        • #5
          Ich versteh deinen Query nicht, was hat es mit dem tx nach dem table_name auf sich?
          ist ein Alias, damit muß man nicht immer den ganzen Tabellennamen schreiben...

          Comment


          • #6
            Originally posted by Kukeiko View Post
            Ich brauche eine Menge an b, die alle 3 Konditionen erfüllen und an ein gleiches a gekoppelt sind.
            Hallo,
            eine weitere Lösungsmöglichkeit (neben der von frauwue) wäre z.B.:
            [highlight=sql]
            SELECT a
            FROM table_name
            WHERE b IN (cond_a, cond_b, cond_c)
            group by a
            having count(distinct b) = 3
            [/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


            • #7
              Hallo,

              noch einmal zur Erklärung der Aliasnamen:

              Du brauchst Aliase, wenn Du Datensätze derselben Tabelle
              miteinander vergleichen bzw. joinen willst.

              Gruß
              Zuletzt editiert von frauwue; 29.06.2008, 20:04.
              docendo discimus

              Comment


              • #8
                Vielen Dank an euch, hab' ich wieder was gelernt

                Comment

                Working...
                X