Abfrage, Datenmenge reduzieren

Peter_Frankfurt

Aktiver Benutzer
Beiträge
29
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
 
Werbung:
Was habe ich denn falsch gemacht bei meiner SUBSTRING & WHERE Abfrage?
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.
 
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
 
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 ...
 
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.

@ DANKE Castorp
 
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?

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);
 
Werbung:
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);

@Danke Castrop, ich werde es in den nächsten Tagen ausprobieren. :)
 
Zurück
Oben