1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
611
611
EMPFEHLEN
-
Hallo zusammen,
ich habe folgende Problemstellung zu der mir keine passende Query gelingen will.
Die Tabelle mytab hat als PK die Felder vorname und nachname.
Nun werden alle Zeilen mit den Vornamen der Maiers an ein Programm gesendet . Dieses verwendet die Vornamen und führt einige Operationen aus.
Code :1
SELECT vorname,nachname FROM mytab WHERE vorname IN (SELECT vorname FROM mytab WHERE nachname='Maier')
Ergebniss:
Paul Maier
Paul Panzer
Hans Maier
Hans Huber
Hans Müller
Danach soll das selbe mit den Vornamen für nachnamen=Müller gemacht werden.
Da aber zB bei Hans Maier, Hans schon bearbeitet wurde, möchte ich die Vornamen die für Maier vorkamen bei Müller nicht mehr im Ergebniss haben.
Die Tabelle wird ca. 5.000 bis 10.000 verschiedene nachnamen mit jeweil 500 bis 20.000 vornamen haben.
Hat jemand eine Idee wie ich für mein Problem eine flotte Query hinbekomme?
Mit bestem Dank
xrax
-
18.09.10 11:34 #2
- Registriert seit
- May 2007
- Ort
- Dresden (Sachsen)
- Beiträge
- 1.961
Erster Hinweis: entferne den Primary Key von Vornamen und Nachnamen und nutze an Stelle dessen eine eindeutige ID mit Auto-Inkrement dafür. Dadurch kannst du dann auch nachsehen, ob die entsprechende ID schon in deiner Liste ist und somit einen doppelten Eintrag vermeiden.
Ich mag:- positive Bewertungen meiner Beiträge
- ein Danke für meine hilfreichen Beiträge
Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX
... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.
-
Hm,- hab ichs falsch beschrieben, hast dus falsch verstanden?
Jedenfalls passt deine Antwort nicht zu meiner Frage.
Trotzdem,- besten Dank
Gruß
xrax
-
18.09.10 16:29 #4
- Registriert seit
- May 2007
- Ort
- Dresden (Sachsen)
- Beiträge
- 1.961
Nein, du hast es nicht falsch geschrieben und ich habe es nicht falsch verstanden. Leider hast du meine Antwort falsch verstanden, denn wenn du meinen Ansatz verfolgst, dann ist das Lösen deines Problemes eine Kleinigkeit.
Ich mag:- positive Bewertungen meiner Beiträge
- ein Danke für meine hilfreichen Beiträge
Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX
... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.
-
Hi crack. Ich glaube er meint was anderes.
1) Nimm alle Namen deren Vornamen auch bei Maiers vorkommen
2) dito für Müller ausser den Vornamen die bei Maiers bereits vorkommen.
Ich geh mal davon aus, es handelt sich um MySQL. Ansosnten für die DB halt einfach mein Ding entsprechend umscrheiben.
Ich habe in der letzten Zeile extra den Befehl FIELD drin und nicht einfach nachname = 'Maier', da nach dem Müller und Maier ev. noch andere Abfragen folgen. Dann muss jeweils einfach der FIELD()-Befehl um den Namen ersetzt werden. Wenn du nach Maier und Müller auch noch den Panzer auswählen willst, dann sieht der FIELD()-Befehl so aus
Code sql:1
FIELD(nachname, 'Maier', 'Müller')
Und hier nun meine Lösung
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14
SELECT vorname, nachname FROM mytab WHERE vorname IN ( SELECT vorname FROM mytab WHERE nachname='Müller') AND vorname NOT IN ( SELECT vorname FROM mytab WHERE FIELD(nachname, 'Maier'))
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Danke yaslaw, das bringt das gewünschte Ergebniss.
FIELD war mir völlig neu.
Braucht allerdings bereits 10 - 20 sek bei 1.5 Mio Einträgen und 8 nachname im NOT IN (SELECT.....
Inzwischen weis ich auch das es bis zu 500.000 nachnamen und ca. 20.000 vornamen geben wird.
Ich probier das jetzt aus, aber das dauert doch bestimmt ewig wenn ich > 5Mio. einträge hab und vielleicht hunderte nachnamen im NOT IN (SELECT.....
Besten Dank
xrax
-
ggf ist sowas schneller.
Aber mit dem FIELD un deinen Millionen Einträgen wirds probleme geben. Das muss man anderst lösen
Code sql:1 2 3 4 5 6 7 8 9 10 11
SELECT t1.vorname, t1.nachname FROM mytab AS t1 INNER JOIN (SELECT vorname FROM mytab WHERE nachname='Müller') AS v1 ON t1.vorname = v1.vorname LEFT JOIN (SELECT vorname FROM mytab WHERE FIELD(nachname, 'Maier')) AS v2 ON t1.vorname = v2.vorname WHERE v2.vorname IS NULL
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
Ähnliche Themen
-
DB2 Version 5.4 Update auf mehrere Sätze mit inner Select auf andere Datei
Von fuDDel im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 24.08.10, 08:24 -
Array mit gleichen Werten
Von lara23 im Forum JavaAntworten: 2Letzter Beitrag: 28.12.08, 12:38 -
Übergabe von Werten auf anderes Formular der gleichen Seite
Von Punicer im Forum HTML & XHTMLAntworten: 2Letzter Beitrag: 19.07.05, 11:53 -
Datensätze mit gleichen werten werden nicht gespeichert
Von die-muecke im Forum Relationale DatenbanksystemeAntworten: 4Letzter Beitrag: 10.08.04, 20:47 -
Zwei-Tabellen, aber mit gleichen Werten
Von Feldhofe im Forum PHPAntworten: 8Letzter Beitrag: 28.06.02, 15:28





Zitieren


Login





