tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von CPoly
ERLEDIGT
NEIN
ANTWORTEN
13
ZUGRIFFE
381
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    hoctar hoctar ist offline Mitglied Brokat
    Registriert seit
    Jun 2007
    Beiträge
    344
    Hallo
    also meine Tabelle sieht so aus:

    id|feld0|feld1| feld2|
    1 | 1 | 1 | 1 |
    2 | 1 | 2 | 2 |
    3 | 2 | 1 | 1 |
    4 | 2 | 2 | 2 |
    5 | 3 | 1 | 1 |

    feld1 und feld2 bilden jeweils Feldpaare.

    Selektiert möchte ich jetzte alles was
    (feld1 = 1 UND feld2 = 1) UND (feld1 = 2 UND feld2 = 2)

    rausbekommen müsste ich jetzt also id -> 1, 2, 3, 4

    Meine Abfrage ist :

    Code :
    1
    2
    3
    4
    
    SELECT id 
        FROM tabelle
    WHERE (feld1 = 1 AND feld2 = 1)
           AND (feld1 = 2 AND feld2 =2)

    Leider bekomme ich ein leeres Ergebnis
    Geändert von hoctar (09.01.10 um 20:32 Uhr)
     

  2. #2
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Es muss in der Mitte ein OR sein, weil der Boolesche-Ausdruck auf jede Zeile angewendet wird.
    Code :
    1
    2
    3
    4
    
    SELECT id 
        FROM tabelle
    WHERE (feld1 = 1 AND feld2 = 1)
           [b]OR[/b] (feld1 = 2 AND feld2 =2)

    Oder habe ich was falsch verstanden? Denn du sagst
    rausbekommen müsste ich jetzt also id -> 1, 2, 3, 4
    Aber id 5 müsste auch dabei sein.
     

  3. #3
    hoctar hoctar ist offline Mitglied Brokat
    Registriert seit
    Jun 2007
    Beiträge
    344
    Bei deinem Query würde aber 1,2,3,4,5 rauskommen.
    Denn id 5 ist ja auch feld1 = 1 und feld2 = 1, aber nicht feld1 = 2 und feld2 = 2

    EDIT:
    also feld0 bildet das Paar was zussamengehört, aber ist erstma unwichtig, denn die abfrage geht theoretisch auch ohne feld0

    EDIT2: sorry ich hatte ein Fehler, jetzt ist die tabelle richtig

    id|feld0|feld1| feld2|
    1 | 1 | 1 | 1 |
    2 | 1 | 2 | 2 |
    3 | 2 | 1 | 1 |
    4 | 2 | 2 | 2 |
    5 | 3 | 1 | 1 |
    Geändert von hoctar (09.01.10 um 20:42 Uhr)
     

  4. #4
    Ork6 Ork6 ist offline Grünschnabel
    Registriert seit
    Jan 2007
    Beiträge
    3
    Die Query von CPoly ist schon richtig. Sie würde die ID 1,2,3,5 als Ergebnis liefern.
    Das Deine Abfrage ein leeres Ergebnis liefert ist doch klar,
    schließlich kann weder feld1 noch feld2 in einem Datensatz sowohl den Wert 1 als auch den Wer 2 haben - logisch oder!?
     

  5. #5
    hoctar hoctar ist offline Mitglied Brokat
    Registriert seit
    Jun 2007
    Beiträge
    344
    Ich möchte nicht 1,2,3,5 sonder 1,2,3,4 und die Query von CPoly würde mir alle anzeigen. Das wäre auch okay würde ich noch ein sechstes Feld anlegen mit:
    6|3|2|2

    EDIT:

    Also feld0 stellt immer die verbindung zu 2 Feldern sogesehen.

    (1)Ein Paar:
    1 | 1 | 1 | 1 |
    2 | 1 | 2 | 2 |

    (2)Noch eins:
    3 | 2 | 1 | 1 |
    4 | 2 | 2 | 2 |

    (3)Und noch eins:
    5 | 3 | 1 | 1 |

    Jetzt möchte 1 und 2 haben, denn schaut ma auf die letzten beiden werte, diese sind gleich.
    Bei 3 eben nicht.
    Geändert von hoctar (09.01.10 um 20:47 Uhr)
     

  6. #6
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Ich weis nicht ob ich jetzt genau verstanden habe, wie es aussehen soll. Kommen die Werte in feld0 maximal 2 mal vor? Und wenn sie weniger als 2 mal da sind, wie im Fall von |5|3|1|1|, dann soll die Zeile ignoriert werden?

    Nochmal: Es sollen alle Zeilen ausgegeben werden, welche eine Partnerzeile mit dem gleichen feld0-Wert haben?

    Wenn das so ist, bastel ich schnell was mit einem Subquery zusammen. Ich teste das mal in HeidiSql.

    Edit: Ich habe mal etwas rumgespielt
    Code sql:
    1
    2
    3
    
    SELECT id FROM paare GROUP BY feld0 HAVING COUNT(feld0)=2
    oder
    SELECT id FROM paare WHERE feld0 IN (SELECT feld0 FROM paare GROUP BY feld0 HAVING COUNT(feld0)=2);
    Geändert von CPoly (09.01.10 um 21:27 Uhr)
     

  7. #7
    hoctar hoctar ist offline Mitglied Brokat
    Registriert seit
    Jun 2007
    Beiträge
    344
    Ich weis nicht ob ich jetzt genau verstanden habe, wie es aussehen soll. Kommen die Werte in feld0 maximal 2 mal vor? Und wenn sie weniger als 2 mal da sind, wie im Fall von |5|3|1|1|, dann soll die Zeile ignoriert werden?
    ne ne

    Also wenn ich z.B. sowas hier habe

    1 | 1 | 1 | 1 |
    2 | 1 | 2 | 2 |
    3 | 1 | 3 | 4 |

    4 | 2 | 1 | 1 |
    5 | 2 | 3 | 2 |

    dann stimmt nur eine kombination überein 1 und 4, weil beide am ende 1 | 1 haben.

    Noch ein Beispiel:

    1 | 1 | 1 | 1 |
    2 | 1 | 9 | 2 |
    3 | 1 | 3 | 4 |

    4 | 2 | 1 | 1 |
    5 | 2 | 3 | 4 |
    6 | 2 | 8 | 7 |

    hier stimmen ( 1 und 4 ) und ( 3 und 5 ) überein, weil id 1 die werte 1 | 1 hat und ebenso auch id 4 1 | 1 hat. So auch bei 3 und 5.

    Aus dieser letzten Tabelle müsste ich also ID: 1, 3, 4, 5 bekommen.
     

  8. #8
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    DELETE FROM paare;
     
    INSERT INTO paare (id,feld0,feld1,feld2) VALUES
    (1,1,1,1),
    (2,1,2,2),
    (3,1,3,4),
    (4,2,1,1),
    (5,2,3,2);
     
    SELECT id FROM paare WHERE CONCAT(feld1,feld2) IN (SELECT CONCAT(feld1,feld2) AS foobar FROM paare GROUP BY foobar HAVING COUNT(foobar)=2);
    Liefert: 1,4

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    DELETE FROM paare;
     
    INSERT INTO paare (id,feld0,feld1,feld2) VALUES
    (1,1,1,1),
    (2,1,9,2),
    (3,1,3,4),
    (4,2,1,1),
    (5,2,3,4),
    (6,2,8,7);
     
    SELECT id FROM paare WHERE CONCAT(feld1,feld2) IN (SELECT CONCAT(feld1,feld2) AS foobar FROM paare GROUP BY foobar HAVING COUNT(foobar)=2);
    Liefert: 1,3,4,5
    Geändert von CPoly (10.01.10 um 11:10 Uhr)
     

  9. #9
    hoctar hoctar ist offline Mitglied Brokat
    Registriert seit
    Jun 2007
    Beiträge
    344
    Danke erstma für die vielen Antworten

    HAVING 2 kann weg .. es können auch mehr als nur 2 sein.

    Bei deinem Query würde bei folgendem Fall ein Fehler kommen.

    1 | 1 | 2 | 34 |
    2 | 2 | 23 | 4 |

    Dies würde ein Paar ergeben, obwohl es eigentlich keins ist.

    also

    ID: 1 CONCAT(feld1, feld2) -> 234
    ID: 2 CONCAT(feld1, feld2) -> 234
     

  10. #10
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Die Feinheiten wirst du ja selbst hinbekommen. Mach das Concat einzigartig z.b. durch
    Code sql:
    1
    
    CONCAT(feld1,',',feld2)
     

  11. #11
    hoctar hoctar ist offline Mitglied Brokat
    Registriert seit
    Jun 2007
    Beiträge
    344
    Ah stimmt, danke

    also ich versuche jetzt folgendes:

    Code :
    1
    2
    3
    4
    
    SELECT id, CONCAT( ext_attr_id, ',', ext_attr_value_id ) AS pair
    FROM items_ext_attr
    WHERE pair = '1,1'
    AND pair = '3,4'

    EDIT: Ah ne sorry,damit durchlaufe ich ja wieder die gleichen paare

    aber leider geht das irgendwie nicht
    Geändert von hoctar (10.01.10 um 14:42 Uhr)
     

  12. #12
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Jetzt bist du wieder exakt da, wo du in deinem ersten Post angefangen hast, nur dass du die beiden Spalten vorher konkateniert hast. pair kann nicht gleichzeitig '1,1' und '3,3' sein!
     

  13. #13
    hoctar hoctar ist offline Mitglied Brokat
    Registriert seit
    Jun 2007
    Beiträge
    344
    Das stimmt. Leider kann ich deine Lösung bei exakt definierten Paaren nicht erweitern.

    Also wenn ich alle Einträge haben möchte bei denen z.B. nur 1,1 und 3,4 vorkommt.

    (1,1,1,1), <- hier1
    (2,1,9,2),
    (3,1,3,4), <- hier2

    (4,2,1,1), <- hier3
    (5,2,3,4), <- hier4
    (6,2,8,7);

    Also möchte ich 1,3 ist paar 1 und 4,5 ist paar 2
    Geändert von hoctar (10.01.10 um 14:56 Uhr)
     

  14. #14
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Eben kam ich auf die Lösung:
    Code sql:
    1
    
    SELECT a.id FROM paare a, paare b WHERE a.feld1=b.feld1 AND a.feld2=b.feld2 AND a.id!=b.id

    Du joinst die Tabelle mit sich selbst und kannst dann im Endeffekt genau die Abfrage machen, wie du sie schon im ersten Post versucht hast.
    hoctar bedankt sich. 

Ähnliche Themen

  1. Selektieren...
    Von twoo im Forum Photoshop
    Antworten: 5
    Letzter Beitrag: 17.08.06, 17:58
  2. jTable selektieren
    Von martmike im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 04.08.06, 11:45
  3. Punkte selektieren
    Von peter333 im Forum Cinema 4D
    Antworten: 3
    Letzter Beitrag: 10.01.06, 22:19
  4. selektieren
    Von Nici im Forum Relationale Datenbanksysteme
    Antworten: 6
    Letzter Beitrag: 14.12.04, 14:03
  5. selektieren
    Von roter Punkt im Forum Cinema 4D
    Antworten: 2
    Letzter Beitrag: 03.08.04, 19:24