Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

SELECT test_Id FROM test_table WHERE vorwahl='02458' AND telenr1='14782': tuts nicht.

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von gutschy, 3 Februar 2014.

  1. gutschy

    gutschy Aktiver Benutzer

    Hallo Leute,

    kurz gesagt, die Kombination Vorwahl und Telefonnummer ist eindeutig. Leider macht dieser Ausdruck folgendes, er gibt die Anzahl der gleichen Einträge wieder, also der Dubletten wenn ich die Tabelle mit Testdaten fülle. In der Tabelle an sich ist test_id ein auto increment Feld das auch normal die Einträge hochzählt. Ich bekomme aber als Antwort für diesen Ausdruck entweder 1, 2 oder 3 je nach Anzahl der Dubletten.
    Code:
    SELECT test_Id FROM  test_table WHERE vorwahl='02458' AND telenr1='14782';
    Das ganze ist noch in Python gebetet, ich hoffe aber erstmal das dieses keinen Einfluss hat.
    Habe ich den Ausdruck falsch aufgeschrieben?

    Wie gesagt, bei 10 verschiedenen Einträgen solle bei diesem Ausdruck z.B. 8 rauskommen, weil es der 8. Eintrag laut Spalte test_Id ist.

    Gruss,

    gutschy
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Was denn nu, ist es eindeutig oder gibt es Dubletten?

    Zeig die Definition der Tabelle und Testdaten.
     
  3. gutschy

    gutschy Aktiver Benutzer

    Ahhhrg, ja ja, also es sind in diesem Fall eindeutige Dubletten.:confused: Heißt, eindeutige test_Id aber gleicher Inhalt, weil die Testdaten die ich einpflege aus bequemlichkeit einfach mal gleich bleiben. Also konkret 10 Zeilen Testdaten, davon 3 mal gleicher Inhalt, dann 2 mal der gleiche Inhalt und der Rest verschieden, aber immer eine eindeutige test_Id.
    Code:
        cur.execute("CREATE TABLE test_table(test_Id INT PRIMARY KEY AUTO_INCREMENT, \
                    laden_name VARCHAR(50), vorwahl VARCHAR(15), telenr1 VARCHAR(20), \
                    telenr2 VARCHAR(20), fax VARCHAR(20), strasse VARCHAR(40), hausnr VARCHAR(20), \
                    plz VARCHAR(20), ort VARCHAR(40), oeffz1 VARCHAR(40), oeffz2 VARCHAR(40), \
                    oeffz3 VARCHAR(40), oeffz4 VARCHAR(40), bestellwert1 VARCHAR(60), \
                    bestellwert2 VARCHAR(60),bestellwert3 VARCHAR(60),rumpf_daten VARCHAR(60), \
                    html_name VARCHAR(40), kartenname VARCHAR(30), ordner VARCHAR(30), \
                    spaltenanzahl INTEGER, logo_ordner VARCHAR(60), logo_name VARCHAR(60))")
    
    Und hier der Dateneintrag:
    Code:
            cur.execute("INSERT INTO pizzeria_table(laden_name, vorwahl, telenr1, telenr2, fax, strasse, \
        hausnr, plz, ort, oeffz1, oeffz2, oeffz3, oeffz4, bestellwert1, bestellwert2, \
        bestellwert3, rumpf_daten, html_name, kartenname, ordner, spaltenanzahl, logo_ordner, \
        logo_name) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",(laden_name, vorwahl, telenr1, telenr2, fax, strasse, \
        hausnr, plz, ort, oeffz1, oeffz2, oeffz3, oeffz4, bestellwert1, bestellwert2, \
        bestellwert3, rumpf_daten, html_name, kartenname, ordner, spaltenanzahl, logo_ordner, \
        logo_name))
    Die Daten kommen eigentlich einwandfrei in die Tabelle.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Und Du bekommst immer den letzten Eintrag, ja? Vermutlich machst eine Schleife und läßt Dir nur den letzten anzeigen

    Warum Strings für die Öffnungszeiten? Warum mehrere Bestellwerte? Warum Bestellwert als Text?

    Wenn Du willst, daß vorwahl und telenr in der Kombination einmalig sein müssen, warum sagst Du das nicht der DB?

    Code:
    test=# create table gutschy (id serial primary key, nr1 text, nr2 text, unique(nr1, nr2));
    CREATE TABLE
    Time: 333,313 ms
    test=*# insert into gutschy (nr1, nr2) values ('4711','0815');
    INSERT 0 1
    Time: 0,622 ms
    test=*# insert into gutschy (nr1, nr2) values ('0815', '4711');
    INSERT 0 1
    Time: 0,256 ms
    test=*# insert into gutschy (nr1, nr2) values ('4711','0815');
    ERROR:  duplicate key value violates unique constraint "gutschy_nr1_nr2_key"
    DETAIL:  Key (nr1, nr2)=(4711, 0815) already exists.
    Time: 10,664 ms
    
    Sieht insgesamt nach einem kapotten Design aus (bestellwert1, bestellwert2) und oeffzN. Wenn das Stammdaten sein sollen (Name, PLZ und so) dann haben Bewegungsdaten (bestellwert) da auch nix zu suchen.
     
  5. gutschy

    gutschy Aktiver Benutzer

    Ne ne, das Design ist ok, sind nur Stammdaten und die formatierung der Felder ist auch einwandfrei. Datenbank Theorie ist mir noch so einigermaßen geläufig.
    oeffz1: Mo-Do 11:00-14:00
    oeffz2: Mo-Do 17:00-22:0
    usw.
    bestellwert1 heißt Mindestbestellwert in der näheren Umgebung
    bestellwert2 ist der Mindestbesttelwert für eine gewisse Region,
    usw.

    Wenn ich zum Beispiel den 7. Eintrag abfrage und der Eintrag wiederholt sich in der 8. und 9. Zeile, dann bekomme 3 raus. Natürlich mit den Id's 7, 8 und 9. Mache ich einen neuen Eintrag, dann kommt 1 raus. Wiederhole ich diesen Eintrag dann kommt 2 raus. In der Tabelle stehen dann zwei gleiche Einträge mit verschiedenen Id's.

    Also das passiert, nur warum?

    Ähm, die Kombination aus Vorwahl und TeleNr, wie sage ich denn der Datenbank das diese einmalig sein muss?
     
    Zuletzt bearbeitet: 4 Februar 2014
  6. akretschmer

    akretschmer Datenbank-Guru

    Dann bin ich ja beruhigt ;-)

    Weil id bei Dir Auto-Dingens ist?

    Unique Index auf die Spalten, siehe mein Beispiel. Die Syntax wird aber so in MySQL wohl nicht gehen, das kann keine Inline-Constraints gemäß SQL-Spec. Mußt separat erstellen.
     
  7. gutschy

    gutschy Aktiver Benutzer

    Wunderbar, konnte dein Beispiel nach MySQL übertragen. Danke für den Tipp. Was mein eigentliches Problem angeht so habe ich festgestellt das es an dem Python Ausdruck lag, warum ich das nicht früher kapiert habe, keine Ahnung, tut mir auch leid, manchmal ist man halt ein wenig vernagelt.
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Schlimm, schlimm. Eigentlich will ich ja nicht MySQL-Lösungen am Leben erhalten, ...
     
  9. gutschy

    gutschy Aktiver Benutzer

Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden