Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Abfrage, Datenmenge reduzieren

Dieses Thema im Forum "PostgreSQL" wurde erstellt von Peter_Frankfurt, 25 Juli 2020.

  1. Peter_Frankfurt

    Peter_Frankfurt Aktiver Benutzer

    Servus,

    ich würde gerne einige Datensätze durch eine Abfrage rausfiltern.

    Ich habe an "Where" gedacht, oder liege ich damit falsch?

    Kann ich eine Abfrage auch nutzen, um eine weitere Abfrage aufzusetzen? Wenn ja, wie?

    select *,
    SUBSTRING (con From 1 For 3) AS CODE_1,
    SUBSTRING (con From 4 For 4) AS CODE_2,
    SUBSTRING (con From 8 ) AS DATEN
    FROM AUTO
    Where
    CODE_2 '9103'

    Fragen über Fragen....
    VG Peter
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Ja, richtig, WHERE dient zum filtern. Und ja, man kann Abfragen verschachteln.
     
  3. Peter_Frankfurt

    Peter_Frankfurt Aktiver Benutzer

    Was habe ich denn falsch gemacht bei meiner SUBSTRING & WHERE Abfrage?

    Peter
     
  4. castorp

    castorp Datenbank-Guru

    Man kann einen Spaltenalias ("as code_2") nicht auf der gleichen Ebene verwenden auf der er definiert wurde. Außerdem fehlt der Operator zwischen "WHERE " und dem eigentlichen Wert, ich vermute Du wolltest "="

    Code:
    select *
    from (
      select *,
             substring (con from 1 for 3) as code_1,
             substring (con from 4 for 4) as code_2,
             substring (con from 8 ) as daten
      FROM auto
    ) t
    where CODE_2 = '9103'
    
    Deine Abfrage könnte aber auch auf einen Fehler im Datenmodell hinweisen. Offensichtlich sind in der Spalte "con" verschiedene Informationen enthalten: die ersten drei Zeichen für "Code 1", dann ein Zeichen für "Code 2" und die restlichen Zeichen als "Daten".

    So etwas sollte man vermeiden. Eine Spalte ist als "atomare Einheit" zu verstehen die nicht weiter (sinnvoll) zerlegt werden kann. Aber auch ohne die Daten und das restliche Modell zu kennen, würde ich sehr stark vermuten, dass das drei getrennte Spalten in der Tabelle "auto" sein sollten.
     
  5. Peter_Frankfurt

    Peter_Frankfurt Aktiver Benutzer

    Hallo Castorp,
    ja, man könnte die Spalte teilen, leider bin ich als Anfänger noch nicht dazu in der Lage. Wie kann man denn die Spalte teilen?

    Peter
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Du könntest via "WITH x AS (hier Dein Select) SELECT * from x WHERE ..." hantieren. Aber @castorp hat schon Recht: Du verbuddelst mehrere Informationen einem Text-Feld, und das ist einfach FAIL.

    Vielleicht kannst Du mal mehr oder weniger konkrete Beispiele zeigen, was Du da hast und haben willst ...
     
  7. Peter_Frankfurt

    Peter_Frankfurt Aktiver Benutzer

    @ DANKE Castorp
     
  8. castorp

    castorp Datenbank-Guru

    Du müsstest zwei neue Spalten anlegen:
    Code:
    alter table auto
       add code_1 text,
       add code_2 text;
    Die "alte" Spalte willst Du dann vielleicht umbenennen:
    Code:
    alter table auto rename column con to daten;
    obwohl "daten" ein ziemlich blöder Name ist, weil er so nichtssagend ist. Aber ohne die Details zu kennen, kann ich nur das nehmen, was in Deiner Frage steht.

    Danach kannst Du den Inhalt der alten Spalte auf die anderen beiden "verteilen":
    Code:
    update auto
      set code_1 = substring(daten from 1 for 3),
          code_2 = substring(daten from 4 for 4),
          daten = substring(daten from 8);
     
  9. Peter_Frankfurt

    Peter_Frankfurt Aktiver Benutzer

    @Danke Castrop, ich werde es in den nächsten Tagen ausprobieren. :)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden