2 Select abfragen aus der selben Tabelle in eine zusammenfassen
Kirian
- datenbank
Ich möchte mir aus einer Datenbank ( Tabellennamen: geodb_textdata ) nur die Daten rausnehmen die ich auch brauche, abe ric
loc_id text_type text_val
21248 400100000 254
21248 400200000 6
21248 400300000 Gemeinde
21248 500100000 Nahe
21248 500100002 NAHE
21248 500400000 04535
21248 500500000 SE
21248 500600000 01060058
21248 500700000 Amt Itzstedt
21248 500300000 23866
21249 400100000 550
21249 400200000 6
21249 400300000 Gemeinde
21249 500100000 Nahetal-Waldau
21249 500100002 NAHETAL-WALDAU
21249 500400000 036841
21249 500500000 HBN
21249 500600000 16069059
21249 500300000 98553
SELECT text_val as name from geodb_textdata WHERE loc_id=21248 AND text_type=500100000
so bekomme ich den Namen der Stadt. In diesem Fall Nahe
Nun möchte ich aber mehr Informationen haben, z.B auch die Plz
SELECT text_val as name from geodb_textdata WHERE loc_id=21248 AND text_type=500400000
dann bekomme ich die PLZ
Wie schaffe ich es aber, die beiden (und dann noch mehr) Abfragen in eienr einzigen abzufragen?
Kirian
Hi,
SELECT text_val as name from geodb_textdata WHERE loc_id=21248 AND text_type=500100000
SELECT text_val as name from geodb_textdata WHERE loc_id=21248 AND text_type=500400000
Wie schaffe ich es aber, die beiden (und dann noch mehr) Abfragen in eienr einzigen abzufragen?
In dem du dir klar machst, was die beiden Abfragen unterscheidet;
und welche grundsätzlichen Arten der Verknüpfung von Bedingungen dein DMBS bereitstellt.
MfG ChrisB
SELECT a.text_val as Plz,
b.text_val as Ort
from geodb\_textdata a
LEFT JOIN geodb_textdata b ON b.loc_id=21248 AND b.text_type=500100000
WHERE
a.loc_id=21248 AND a.text_type=500400000
Mahlzeit gast 1000,
LEFT JOIN geodb_textdata b ON b.loc_id=21248 AND b.text_type=500100000
SELF-JOINs mit fixen Werten sind bei so einem Anwendungsfall ziemlicher Bockmist.
SELECT a.text_val AS Plz
, b.text_val AS Ort
FROM geodb_textdata a
LEFT JOIN geodb_textdata b ON (a.loc_id = b.loc_id AND b.text_type = 500100000)
WHERE a.loc_id = 21248
AND a.text_type = 500400000
MfG,
EKKi
moin,
SELF-JOINs mit fixen Werten sind bei so einem Anwendungsfall ziemlicher Bockmist.
überhaupt einen JOIN in diesem anwendungsfall zu benutzen, erst recht einen OUTER scheint mir in diesem fall ebenfalls bockmist zu sein. was spricht den gegen:
SELECT text_val name, text_type
FROM geodb_textdata
WHERE loc_id=21248 AND text_type IN (500400000, 500400000)
;
oder von mir aus auch:
SELECT text_val name, text_type
FROM geodb_textdata
WHERE loc_id=21248 AND text_type = 500400000
UNION ALL
SELECT text_val , text_type
FROM geodb_textdata
WHERE loc_id=21248 AND text_type 500400000
;
Ilja
upps copy & paste fehler, der eine type muss natürlich 500100000 sein...
Ilja
Mahlzeit Ilja,
was spricht den gegen:
Dagegen spricht ggf., dass man alle Informationen zu einem Ort in *EINEM* Datensatz haben möchte (und nicht in mehreren) ... und dann kommt man AFAIK nicht um JOINs oder Sub-SELECTs herum.
MfG,
EKKi
moin,
Dagegen spricht ggf., dass man alle Informationen zu einem Ort in *EINEM* Datensatz haben möchte (und nicht in mehreren) ... und dann kommt man AFAIK nicht um JOINs oder Sub-SELECTs herum.
beim JOIN bekomme ich doch auch mehrere datensätze....
Ilja
Mahlzeit Ilja,
beim JOIN bekomme ich doch auch mehrere datensätze....
Bei einer Grundmenge von
loc_id | text_type | text_val
-------+-----------+----------------
21248 | 400100000 | 254
21248 | 400200000 | 6
21248 | 400300000 | Gemeinde
21248 | 500100000 | Nahe
21248 | 500100002 | NAHE
21248 | 500400000 | 04535
21248 | 500500000 | SE
21248 | 500600000 | 01060058
21248 | 500700000 | Amt Itzstedt
21248 | 500300000 | 23866
21249 | 400100000 | 550
21249 | 400200000 | 6
21249 | 400300000 | Gemeinde
21249 | 500100000 | Nahetal-Waldau
21249 | 500100002 | NAHETAL-WALDAU
21249 | 500400000 | 036841
21249 | 500500000 | HBN
21249 | 500600000 | 16069059
21249 | 500300000 | 98553
liefert die Abfrage
SELECT a.text_val AS Plz
, b.text_val AS Ort
FROM geodb_textdata a
LEFT JOIN geodb_textdata b ON (a.loc_id = b.loc_id AND b.text_type = 500100000)
WHERE a.loc_id = 21248
AND a.text_type = 500400000
genau *EINEN* Datensatz:
Plz | Ort
------+-----
04535 | Nahe
MfG,
EKKi
moin,
Bei einer Grundmenge von
und du willst die abfrage aufbauen, dass sie bei änderung der datenmenge immer noch so funktioniert, ohne wissen welche constraints vorhanden sind ?
Ilja
Mahlzeit Ilja,
und du willst die abfrage aufbauen, dass sie bei änderung der datenmenge immer noch so funktioniert, ohne wissen welche constraints vorhanden sind ?
Ich wollte lediglich gast 1000s Abfrage verbessern, da es meiner Ansicht nach Bockmist ist, im verwendeten Self-JOIN die "loc_id" nochmals erneut explizit anzugeben anstatt über die "loc_id"-Spalten zu joinen.
MfG,
EKKi
moin,
Ich wollte lediglich gast 1000s Abfrage verbessern, da es meiner Ansicht nach Bockmist ist, im verwendeten Self-JOIN die "loc_id" nochmals erneut explizit anzugeben anstatt über die "loc_id"-Spalten zu joinen.
unbetristten, aber ein join ist dch hier grundsätzlich bockmist oder nicht ?
Ilja