Kirian: 2 Select abfragen aus der selben Tabelle in eine zusammenfassen

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

  1. 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

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. 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

      1. 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

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. 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

          1. upps copy & paste fehler, der eine type muss natürlich 500100000 sein...

            Ilja

          2. 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

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            1. 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

              1. 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

                --
                sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                1. 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

                  1. 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

                    --
                    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                    1. 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