• 23.04.2024, 16:36
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Lieber Besucher, herzlich willkommen bei: Aqua Computer Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

mal wieder (postgre)SQL! hilfe bei view.

Dienstag, 22. Juni 2010, 23:26

moin allerseits,

häng gerade an nem eigentlich recht trivialen problem, hab nur (mal wieder) nen brett vorm kopp... ich hab ne tabelle

raum:
PK ID
kapazität
gebäude

"findet_statt":
PK ID
FK Vortrag auf Vortrag.ID
FK Raum auf Raum.ID

Vortrag
PK ID
Thema
Details

(und nochn paar mehr)

und ich will nen view, welcher mir sämtliche vorträge anzeigt, inkl. details, maximale kapazität und die anzahl der belegten plätze (über tabelle "nimmt_teil").

CREATE VIEW "Übersicht_Vorträge" AS
SELECT
"Vortrag"."Thema",
"Vortrag"."Details",
"Vortrag"."Voraussetzung",
(SELECT COUNT(*) FROM "teilnahme","Vortrag" WHERE "teilnahme"."V_ID" = "Vortrag"."ID") AS Hoerer,
(SELECT "Raum"."Kapazität" FROM "Raum" JOIN "findet_statt" ON ("findet_statt"."Raum"="Raum"."ID")JOIN "Vortrag" ON ("Vortrag"."ID"="findet_statt"."Vortrag")) AS Maximal
FROM "Vortrag", "findet_statt", "Raum"
WHERE "Vortrag"."geprüft_von" > '0'
AND "Vortrag"."Status" = 'zugelassen';

Problem: Das Dingen fliegt mir bei "Maximal" mit "ERROR: more than one row returned by a subquery used as an expression" um die ohren, was ja auch klar ist, mehrere ergebnisse auf ein feld.
wie krieg ich das gelöst?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »miami flashback« (22. Juni 2010, 23:27)

Dienstag, 22. Juni 2010, 23:41

Du versuchst mit deinem Code eine einzelne Zeile mit einer kompletten Tabelle zu verbinden. Du kannst das ganze lösen indem du anstatt die JOIN durch WHERE und AND ersetzt. Damit kannst du einzelne Räume auswählen, angenommen dass die Kombinationen aus der Raum.ID und der Vortrag.ID einzigartig sind.
Die Unterabfrage müsste so aussehen:

(SELECT "Raum"."Kapazität" FROM "Raum", "findet_statt", "Vortrag" WHERE "Vortrag"."ID"="findet_statt"."Vortrag" AND "findet_statt"."Raum"="Raum"."ID") AS Maximal

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Eliza« (22. Juni 2010, 23:44)

(14:03:23) (Cerbis_Latran) Dude, uhm. Do me a personal favor?
(14:03:51) (Eliza) what is it?
(14:04:04) (Cerbis_Latran) Never kill anyone. You'd enjoy it far too much.

Mittwoch, 23. Juni 2010, 00:09

beim "select * from "Übersicht_Vorträge" soll Thema, Detail, Voraussetzung, die Anzahl der Hörer sowie die Maximale Anzahl erscheinen.

Im Augenblick habe ich in der "nimmt_teil" 2 verschiedene Datensätze, die jeweils auf bei FK auf andere Vorträge zeigen. Count wirft jetzt 2 raus, was garnicht meine Intention gewesen ist: In der aktuellen Zeile
soll ja nur angezeigt werden, wer zu dem "aktuellen" Vortrag geht, sprich:

1 Vortrag1 Detail1 keine1 1 500
2 Vortrag2 Detail2 keine2 1 250.

Deins hilft mir ja nicht weiter, aufgrund meiner falsch formulierten Problemstellung.

update:

http://de.wikibooks.org/wiki/Einf%C3%BCh…abler_Selektion

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »miami flashback« (23. Juni 2010, 00:33)

Ähnliche Themen