Morfois Geschrieben 15. Oktober 2005 Teilen Geschrieben 15. Oktober 2005 Hallöchen. Nun habe ich in diesem Forum zu diesem Thema nichts gefunden, desswegen stelle ich meine frage einfach mal. Sollte es hier trotzdem schon mal diskutiert worden sein, ziehe ich schon mal meinen kopf ein! ^^ Also ich habe eine Frage. Und zwar will ich ungefähr diesen Query aufbauen: SELECT name FROM tabelle WHERE erster_buchstabe = 'A' nun habe ich mal nachgeforscht und mir das hier zusammengebastelt: SELECT name FROM db_rides WHERE SUBSTRING(name FROM 1 FOR 1)='A' ORDER BY name ASC; nun habe ich aber nicht nur die db_rides, sondern auch die folgenden tabellen, die ich mit in den query einbeziehen möchte: db_hotels.name db_parks.name db_kirmes.name db_firma.name Meine frage: wie muss der query aussehen, damit ich die namen, wo der erste buchstabe ein A ist, aus allen tabellen zurückbekomme? Gruß Morfois Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 16. Oktober 2005 Teilen Geschrieben 16. Oktober 2005 Hallo, die anderen Selects mußst Du mit union aneinander reihen. SELECT name FROM db_rides WHERE SUBSTRING(name FROM 1 FOR 1)='A' UNION SELECT name FROM db_hotels WHERE SUBSTRING(name FROM 1 FOR 1)='A' UNION SELECT name FROM db_parks WHERE SUBSTRING(name FROM 1 FOR 1)='A' ORDER BY name ASC; Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
phadiax Geschrieben 16. Oktober 2005 Teilen Geschrieben 16. Oktober 2005 Ich habs nicht ausprobiert, aber könnte das nicht auch funktionieren? SELECT db_hotels.name, db_parks.name, db_kirmes.name, db_firma.name FROM db_hotels, db_parks, db_kirmes, db_firma WHERE SUBSTRING(name FROM 1 FOR 1)='A' ORDER BY name ASC Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 16. Oktober 2005 Teilen Geschrieben 16. Oktober 2005 Ich habs nicht ausprobiert, aber könnte das nicht auch funktionieren? Die Tabellen müssten noch in der WHERE Bedingungen "ge-joint" werden. Gruß, Markus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
zirri Geschrieben 16. Oktober 2005 Teilen Geschrieben 16. Oktober 2005 ob eine (Text)-spalte mit a beginnt wuerde ich aus performancegruenden vielleicht mit where xyz like 'A%' machen gruss Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Morfois Geschrieben 16. Oktober 2005 Autor Teilen Geschrieben 16. Oktober 2005 Oha, vielen dank für die vielen schnellen antworten. Also das mit dem joinen, was der phadiax angesprochen hat, funktioniert nicht, das habe ich bereits ausprobiert. man bekommt nichts zurück! Was ich interessant finde ist der like befehl. Wie würde sich das denn dann auf die performance auswirken? immerhin ist das für mich interessant, weil alleine die db_rides ca. 650 einträge hat, die immer mehr werden (giebt halt genug achterbahnen auf der welt ^^ ) Auf union bin ich bisher nicht gekommen, habe immer nur per join versucht. Werde es direkt mal probieren! :-) gruß Morfois ______________________________________________________________ So, das mit UNION klappt super, jetzt hab ich alle namen wo ein A am anfang steht! :-) Nur woher weis ich denn welcher name aus welcher tabelle stammt??? (isn bissl unübersichtlich) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 17. Oktober 2005 Teilen Geschrieben 17. Oktober 2005 Was ich interessant finde ist der like befehl. Wie würde sich das denn dann auf die performance auswirken? immerhin ist das für mich interessant, weil alleine die db_rides ca. 650 einträge hat, die immer mehr werden (giebt halt genug achterbahnen auf der welt ^^ ) Es würde sich positiv auf die Performance auswirken. Wie genau kann ich dir nicht sagen, aber die substr Lösung sind schonmal 2 Aktionen, die der Server machen muss (Str kopieren und dann vergleichen) und die like Version vergleicht nur. Aber 650 Einträge sind doch nix Denke, da wirst du nichtmal nen Unterschied merken, nur im Millisekunden Bereich. EDIT: Denke aber, die Union-Lösung ist die bessere, weil du keinen eindeutigen Schlüssel hast, mit dem du die Dateien verjoinen kannst. Es wird also jeder Satz jeder Datei an jeden Satz der anderen Datei gehängt. Was hast du mit der Abfrage denn vor? Alle Namen mit A Filtern und anzeigen? Dann mach lieber 4 Abfragen daraus, weil du dann genau weisst wo sie herkommen und sie entprechend anzeigen kannst. Ansonsten weisst du nicht woher der Satz stammt, ausser du schreibst den Tabellennamen vor den Namen (concat('db_rides',' - ', name)). EDIT2: oder du machst daraus: SELECT 'Tabellenname', name from ... where name like 'A%' Das musst du aber von Hand jeweils ins SELECT schreiben (bei der Lösung davor auch) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Morfois Geschrieben 17. Oktober 2005 Autor Teilen Geschrieben 17. Oktober 2005 aha soweit so gut. naja ok 650 ist wirklich nicht viel ^^ ich habe damit folgendes vor: Ich habe eine seite, wo mann das alphabet sieht (abc usw.) und möchte nun erreichen, dass wenn man beispielsweise auf "a" klickt aus den oben genannten tabellen jeder name mit nem "a" am anfang angezeigt wird, mit einem sysmbol vorne vor, wo der besucher anhand einer legende vergleichen kann, ob dieser name eine achterbahn, ein freizeitpark, eine firma, ein wort aus dem lexicon, usw. ist! Desswegen muss ich auch wissen aus welcher tabelle der name ursprünglich stammt. Diese ganze liste sollte sortiert sein, jedoch nich nach der ursprungstabelle sondern alle insgesammt alphabetisch nach name. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 18. Oktober 2005 Teilen Geschrieben 18. Oktober 2005 Diese ganze liste sollte sortiert sein, jedoch nich nach der ursprungstabelle sondern alle insgesammt alphabetisch nach name. Dann ist ein Union SELECT das einzige, was du da machen kannst. Mit einem UNION SELECT werden mehrere Abfragen zu einem Ergebnis zusammengefasst. Wichtig ist nur, dass die Anzahl und Art der Ergebnisfelder übereinstimmt. Und für jede Abfrage hängst du noch ein Feld mit dem Namen oder einem Kennzeichen dran, also: SELECT 'X', name FROM TabelleA WHERE name LIKE 'A%' OR name LIKE 'a%' UNION SELECT 'Y', name FROM TabelleB WHERE name LIKE 'A%' OR name LIKE 'a%' ORDER BY name Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.