Veröffentlicht 1. Juni 201015 j Hallo, es geht um folgende Aufgabe: Es sollen alle Zeilen mit einem Spaltenwert von "d_std > 2000 aus der Tabelle CAR in die Tabelle CABC kopiert werden. Die Tabelle CABC enthält die Spalten "herst", "typ", "ser_nr" und "wartungsdatum" mit denselben entsprechenden Datentypen wie die Tabelle CAR. Es soll zum Kopieren eine Unterabfrage verwendet werden. Die Klausel zum Einfügen einer Zeile in die Tabelle CABC soll die Spaltenliste "herst", "typ" und "ser_nr" enthalten. Die Tabelle CAR besitzt folgende Spalten: "herst", "typ", "ser_nr", "d_std" und "an_datum". Für Lösungsvorschläge wäre ich sehr dankbar. Vielen Dank im Voraus.
2. Juni 201015 j Grob gesagt als Kombination einer Auswahlabfrage auf CAR und einer Änderungsabfrage auf CABC. Was ist dir genau unklar? Was hast du dazu bisher im SQL erstellt?
2. Juni 201015 j in diesem fall ist from und where sicher angebracht, aber ein select funktioniert auch ohne daher wird das eigentlich immer als INSERT INTO ... SELECT bezeichnet *klug******* ^^ *mitmach*
2. Juni 201015 j wie funktioniert ein select ohne from :eek ist doch immer insert into bla ( select b_id from blubb where b_id > 10 ); beispielsweiße oder ?
2. Juni 201015 j _n4p_ hat schon recht. "Umgansprachlich bezeichnet man das als INSERT INTO ... SELECT. das wirst Du immer wieder so finden. Das FROM schenkt man sich einfach, da es nur um die Befehle an sich geht. Gleiches gilt z.B. für CTAS (Create Table As Select) das nennt sich auch nicht CTASF. Dim
2. Juni 201015 j wie funktioniert ein select ohne from :eek SELECT 1+1; nein ist in verbindung mit dem insert nicht sinnvoll, aber das hat ja keiner behauptet ^^
2. Juni 201015 j Hallo MartinSt, deine Fragen sind berechtigt und die Informationen zu meiner Anfrage waren auch nicht vollständig. Daher noch folgender Sachverhalt: - Die Tabelle CABC muss neu angelegt werden. - Innerhalb der CREATE TABLE-Anweisung soll eine Unterabfrage erfolgen, in der die Datensätze "d_std > 2000" aus der Tabelle CAR in die neue Tabelle CABC kopiert werden. - Die neue Tabelle CABC soll die Spalten "herst", "typ", "ser_nr" enthalten, die auch die Tabelle CAR enthält. - Problem: Zusätzlich soll das Attribut "wartungsdatum" in die neue Tabelle aufgenommen werden (Datentyp DATE), das keine Daten enthalten soll. Dieses Attribut existiert so nicht in der Tabelle CAR, dafür besitzt diese Tabelle das Attribut "an_datum", mit Daten zum Anschaffungsdatum (Datentyp DATE). Quelltabelle: CAR mit den Attributen "herst", "typ", "ser_nr", "d_std", "an_datum" gefüllt mit Werten. Zieltabelle: CABC mit den Attributen "herst", "typ", "ser_nr" gefüllt mit entsprechenden Werten, "wartungsdatum" bleibt leer. Daher waren meine Überlegungen bis jetzt folgende: create table CABC as select herst, typ, ser_nr from CAR where d_std > 2000; Die Anweisung funktioniert so weit. Wie erhalte ich aber das Attribut "wartungsdatum" ohne Datensätze aus der Tabelle CAR in die neue Tabelle CABC? Es könnte ein JOIN zur Lösung führen, da müsste ich aber im Moment noch passen.
2. Juni 201015 j wenn ich dich recht verstanden habe gibt es keine daten die du in wartungsdatum übernehmen kannst/willst in dem Fall kannst du auch an der stelle einen einfachen ausdruck mit in das select aufnehmen. zb SELECT DATE('') AS 'wartungsdatum' und dann den rest so wie du es schon hast. nachteil wäre hier nur das dann standardmäßig überall der 1.1.1970 das wartungsdatum ist, weil die 0 halt auch als datum interpretiert wird. getestet unter MySQL 5.x, in MSSQL müsste es auch so/ähnlich funktionieren, oracle keine ahnung vermutlich aber schon.
2. Juni 201015 j @alobar Von welcher DB reden wir hier? Wo ist jetzt konkret dein Problem; beim wartungsdatum oder bei der Kombination von create und Insert? Gruß Martin
3. Juni 201015 j Es geht um das Erstellen des Attributs "wartungsdatum", das leer bleiben soll, für die neue Tabelle CABC innerhalb der oben beschriebenen Anweisung.
3. Juni 201015 j Ich habe das Problem gelöst. Mit CAST (NULL AS DATE) komme ich zu dem Ergebnis, das ich brauche. Vielen Dank für die Lösungsvorschläge.
4. Juni 201015 j in postgreSQL auch, nur oracle kann es wieder nicht ginge sowas in oracle? SELECT meine_ganz_tolle_funktion('blub');
4. Juni 201015 j Man muss ja auch nicht jeden Blödsinn mitmachen dafür gibts die dual Table. In oracle geht folgendes: select geniale_function from dual oder select * from table(ganz_tolle_pipelined_function) Dim
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.