Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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

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

ob eine (Text)-spalte mit a beginnt wuerde ich aus performancegruenden vielleicht

mit where xyz like 'A%' machen

gruss

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)

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)

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.

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.