Sie sind nicht angemeldet.

NullAhnung

Erfahrener Schreiberling

  • »NullAhnung« ist weiblich
  • »NullAhnung« ist der Autor dieses Themas

Beiträge: 332

Registrierungsdatum: 28.04.2003

1

07.12.2003, 14:42

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« ist männlich

Beiträge: 1 234

Registrierungsdatum: 11.12.2001

2

07.12.2003, 15:41

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

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Informatik Minister« (07.12.2003, 15:41)


  • »Joachim« ist männlich

Beiträge: 2 863

Registrierungsdatum: 11.12.2001

Wohnort: Hämelerwald

Beruf: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

3

07.12.2003, 16:37

RE: SQL Blatt 8

Zitat

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« ist männlich

Beiträge: 1 234

Registrierungsdatum: 11.12.2001

4

07.12.2003, 17:16

RE: SQL Blatt 8

Zitat

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

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Informatik Minister« (07.12.2003, 17:21)


Catherine

Trainee

  • »Catherine« ist weiblich

Beiträge: 61

Registrierungsdatum: 06.10.2003

5

09.12.2003, 15:26

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« ist männlich

Beiträge: 2 643

Registrierungsdatum: 11.12.2001

Wohnort: Hannover

Beruf: Developer

6

09.12.2003, 18:16

Zitat

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

Beiträge: 269

Registrierungsdatum: 14.02.2002

Beruf: Student ;-)

7

10.12.2003, 11:33

Zitat

Original von migu

Zitat

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« ist weiblich

Beiträge: 61

Registrierungsdatum: 06.10.2003

8

10.12.2003, 12:14

Zitat

Original von migu

Zitat

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

Beiträge: 9

Registrierungsdatum: 13.11.2003

9

10.12.2003, 20:09

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« ist männlich

Beiträge: 2 863

Registrierungsdatum: 11.12.2001

Wohnort: Hämelerwald

Beruf: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

10

10.12.2003, 21:26

Zitat

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:

Quellcode

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:

Quellcode

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

Beiträge: 9

Registrierungsdatum: 13.11.2003

11

10.12.2003, 22:39

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« ist männlich

Beiträge: 2 863

Registrierungsdatum: 11.12.2001

Wohnort: Hämelerwald

Beruf: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

12

10.12.2003, 22:41

Zitat

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

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Joachim« (10.12.2003, 22:42)


furmann

Praktikant

Beiträge: 9

Registrierungsdatum: 13.11.2003

13

11.12.2003, 01:06

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