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

gutschy

Aktiver Benutzer
Beiträge
32
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
 
Werbung:
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.

gutschy

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

Zeig die Definition der Tabelle und Testdaten.
 
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.
 
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.

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

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))")

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.
 
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:
Ne ne, das Design ist ok,
Dann bin ich ja beruhigt ;-)

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?
Weil id bei Dir Auto-Dingens ist?

Ähm, die Kombination aus Vorwahl und TeleNr, wie sage ich denn der Datenbank das diese einmalig sein muss?

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.
 
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.
 
Werbung:
Zurück
Oben