Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

NullAhnung

Erfahrener Schreiberling

  • "NullAhnung" is female
  • "NullAhnung" started this thread

Posts: 332

Date of registration: Apr 28th 2003

1

Sunday, December 7th 2003, 2:42pm

SQL Blatt 8

Kann ich ne Kopie erstellen einfach durch SELECT * FROM oder muß ich das irgendwie anders machen? Wenn ja, wie gehts, wo stehts? ;)

Informatik Minister

Senior Schreiberling

  • "Informatik Minister" is male

Posts: 1,234

Date of registration: Dec 11th 2001

2

Sunday, December 7th 2003, 3:41pm

RE: SQL Blatt 8

Da fehlen Dir dann noch die constraints. Dazu meine Fräge: Wie kopiert man die Integritätsbedingungen automatisch mit? Gibt ja doch recht viele CHECK constraints in den Tabellen, wenn ich das alles richtig deute.
"Fliegenpilze! Löwen!! Das Leben ist gefährlich." -- www.katzundgoldt.de

This post has been edited 1 times, last edit by "Informatik Minister" (Dec 7th 2003, 3:41pm)


  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

3

Sunday, December 7th 2003, 4:37pm

RE: SQL Blatt 8

Quoted

Original von Informatik Minister
Da fehlen Dir dann noch die constraints. Dazu meine Fräge: Wie kopiert man die Integritätsbedingungen automatisch mit?
Geht nicht. Liegt daran, daß die Constraints benannt sind und eindeutige Namen haben müssen.

Aber vielleicht bringt dich das hier auf eine gute Idee: :)
http://www.dbs.uni-hannover.de/lehre/sql…ngen/presdb.sql
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

Informatik Minister

Senior Schreiberling

  • "Informatik Minister" is male

Posts: 1,234

Date of registration: Dec 11th 2001

4

Sunday, December 7th 2003, 5:16pm

RE: SQL Blatt 8

Quoted

Original von Joachim
Aber vielleicht bringt dich das hier auf eine gute Idee: :)
http://www.dbs.uni-hannover.de/lehre/sql…ngen/presdb.sql

's bringt, 's bringt. Danke.
:evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: :evil: (<- masslos)
"Fliegenpilze! Löwen!! Das Leben ist gefährlich." -- www.katzundgoldt.de

This post has been edited 2 times, last edit by "Informatik Minister" (Dec 7th 2003, 5:21pm)


Catherine

Trainee

  • "Catherine" is female

Posts: 61

Date of registration: Oct 6th 2003

5

Tuesday, December 9th 2003, 3:26pm

Hallo,

bei Aufgabe 1b), wie kann man eine update-Anweisung schreiben, die für alle Präsidenten in die Spalte (pres_num) gilt?

kann jemand ein paar Tipps geben? Danke! :))
Follow your heart, not brain!

migu

free rider

  • "migu" is male

Posts: 2,643

Date of registration: Dec 11th 2001

Occupation: Developer

6

Tuesday, December 9th 2003, 6:16pm

Quoted

Original von Catherine
bei Aufgabe 1b), wie kann man eine update-Anweisung schreiben, die für alle Präsidenten in die Spalte (pres_num) gilt?


Ich nehme mir einfach die Nummer der Legislaturperiode, in der ein Präsident im Amt gewesen ist (Tabelle MY_ADMINISTRATION) und setze Pres_Num auf diesen Wert.

Das geht ungefähr so:

UPDATE ...
SET pres_num = (select ...);

HTH, migu
tar: Anlegen eines leeren Archivs wird feige verweigert.

ap

Erfahrener Schreiberling

Posts: 269

Date of registration: Feb 14th 2002

Occupation: Student ;-)

7

Wednesday, December 10th 2003, 11:33am

Quoted

Original von migu

Quoted

Original von Catherine
bei Aufgabe 1b), wie kann man eine update-Anweisung schreiben, die für alle Präsidenten in die Spalte (pres_num) gilt?


Ich nehme mir einfach die Nummer der Legislaturperiode, in der ein Präsident im Amt gewesen ist (Tabelle MY_ADMINISTRATION) und setze Pres_Num auf diesen Wert.


Das kann's nicht sein. Schließlich war Adams der zweite Präsident der USA, nicht der dritte.
Who the fuck is General Failure and why does he read my hard disk? ?(

Catherine

Trainee

  • "Catherine" is female

Posts: 61

Date of registration: Oct 6th 2003

8

Wednesday, December 10th 2003, 12:14pm

Quoted

Original von migu

Quoted

Original von Catherine
bei Aufgabe 1b), wie kann man eine update-Anweisung schreiben, die für alle Präsidenten in die Spalte (pres_num) gilt?


Ich nehme mir einfach die Nummer der Legislaturperiode, in der ein Präsident im Amt gewesen ist (Tabelle MY_ADMINISTRATION) und setze Pres_Num auf diesen Wert.

Das geht ungefähr so:

UPDATE ...
SET pres_num = (select ...);

HTH, migu


Danke migu, ich habe auch so ähnlich geschrieben, aber leider geht es nicht.

update my_president p
set p.pres_num = (select a.admin_nr
from my_administration a
where p.pres_name = a.pres_name
);

ERROR at line 2:
ORA-01427: single-row subquery returns more than one row
Follow your heart, not brain!

furmann

Praktikant

Posts: 9

Date of registration: Nov 13th 2003

9

Wednesday, December 10th 2003, 8:09pm

da haeng ich auch eben. Man muss in dem fall eine group funktion benutzen, zb: ... (select count(admin_nr)... was allerdings dazu fuehrt, das man in der pres_num spalte nur die anzahl an amtsperioden bekommt.
kann wer weiterhelfen?

gruss
Matthias

  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

10

Wednesday, December 10th 2003, 9:26pm

Quoted

Original von furmann
da haeng ich auch eben. Man muss in dem fall eine group funktion benutzen, zb: ... (select count(admin_nr)... was allerdings dazu fuehrt, das man in der pres_num spalte nur die anzahl an amtsperioden bekommt.
kann wer weiterhelfen?
Folgendermaßen funktioniert es:

Zuerst schreibt man eine Abfrage auf my_administration, das einem eine nach Präsidenten gruppierte und nach minimaler Amtsperiode sortierte Liste aller Präsidenten und minimaler Amtsperioden liefert. Das sieht dann so aus:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
MIN(ADMIN_NR) PRES_NAME
------------- ---------------
            1 Washington G
            3 Adams J
            4 Jefferson T
            6 Madison J
            8 Monroe J
           10 Adams J Q
           11 Jackson A
           13 Van Buren M
           14 Harrison W H
           14 Tyler J
           15 Polk J K

           ...


Basierend darauf erstellt man eine neue Abfrage, die einem mittels ROWNUM die Zeilennummer liefert (und damit, um den wievielten Präsidenten es sich jeweils handelt). Das sieht dann so aus:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
         R PRES_NAME
---------- ---------------
         1 Washington G
         2 Adams J
         3 Jefferson T
         4 Madison J
         5 Monroe J
         6 Adams J Q
         7 Jackson A
         8 Van Buren M
         9 Harrison W H
        10 Tyler J
        11 Polk J K

        ...


Diese Abfrage kann man nun im UPDATE-TABLE-Statement verwenden.

Das ganze läuft natürlich auf drei geschachtelte Unterabfragen hinaus, aber so geht es.
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

furmann

Praktikant

Posts: 9

Date of registration: Nov 13th 2003

11

Wednesday, December 10th 2003, 10:39pm

klasse Ansatz ! bis zum punkt von ROWNUM kann ich es rekonstruieren; sobald ich aber mit UPDATE werkle, bekomm ich leider nur den wert '1' in pres_num.
Jemand gleiches Ergebnis ?

Gruss
Matthias

  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

12

Wednesday, December 10th 2003, 10:41pm

Quoted

Original von furmann
klasse Ansatz ! bis zum punkt von ROWNUM kann ich es rekonstruieren; sobald ich aber mit UPDATE werkle, bekomm ich leider nur den wert '1' in pres_num.
Jemand gleiches Ergebnis ?
Das Problem hatte ich auch. Man muß in der WHERE-Klausel qualifiziert angeben, welche Tabellen gemeint sind. Also "my_president.pres_name" statt "pres_name" angeben.

Und auch wichtig: In der Abfrage, in der die ROWNUM erzeugt wird, darf noch nicht gefiltert werden, sondern erst eine Abfrageebene drüber.
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

This post has been edited 1 times, last edit by "Joachim" (Dec 10th 2003, 10:42pm)


furmann

Praktikant

Posts: 9

Date of registration: Nov 13th 2003

13

Thursday, December 11th 2003, 1:06am

nochmals danke fuer die hinweise; aber mein problem war wohl einwenig anders gelagert; habe nach der eigentlichen ROWNUM subquery wiederum ein ROWNUM query um die eigentliche routine gebaut, bis mir auffiel, das dies natuerlich zu '1' fuehren muss; so ging es nun:
...
(select RN from (select ROWNUM AS RN, pres_name from
...

mit dem Alias RN funktioniert es :)

gruss
Matthias