Seite 1 von 1

Wieso kann Primärschlüssel nicht abgefragt werden?

Verfasst: Di, 08.03.2011 07:39
von eve
Hallo,

Ich habe da mal eine Verständnisfrage. Ich habe mich in letzter Zeit unter anderem mit folgender Seite weiter in SQL eingearbeitet.
http://www.w3schools.com/SQl/sql_join_left.asp

Die Abfrage dort funktioniert so wie sie dargestellt ist einwandfrei. Sobald ich aber die Spalte O_Id (Primärschlüssel der Tabelle Orders) auch darstellen will, dann bekomme ich die Fehlermeldung: „Die Dateninhalte konnten nicht geladen werden. No data is available“.
Wenn ich jetzt eine extra Spalte O_Id2 mit den Daten anlege und die Abfrage darauf beziehe, dann funktioniert es wieder. Meine Frage ist nun, wieso können die Daten der Spalte O_Id nicht angezeigt werden wenn sie als Primärschlüssel hinterlegt sind?

Gruß,
eve

Re: Wieso kann Primärschlüssel nicht abgefragt werden?

Verfasst: Di, 08.03.2011 08:21
von komma4
Bei welcher Abfrage (SQL-Code) funktioniert das bei Dir nicht?

OOo Version und Betriebssystem?

Welche Datenbank nutzt Du? Treiber?

Hier klappt eine Abfrage auf einen Primärschlüssel der eingebauten HSQLDB problemlos.

Re: Wieso kann Primärschlüssel nicht abgefragt werden?

Verfasst: Di, 08.03.2011 08:39
von hol.sten
eve hat geschrieben:Sobald ich aber die Spalte O_Id (Primärschlüssel der Tabelle Orders) auch darstellen will, dann bekomme ich die Fehlermeldung: „Die Dateninhalte konnten nicht geladen werden. No data is available“.
Da ich mir nicht vorstellen konnte, warum das nicht funktionieren soll, habe ich das Beispiel mal mit OOo 3.2.0 auf Ubuntu 10.04 mit Java 1.6.0_16 und einer niegel nagel neuen HSQLDB ausprobiert. Und siehe da: Es funzt.

Sowohl:

Code: Alles auswählen

SELECT "Persons"."LastName", "Persons"."FirstName", "Orders"."OrderNo", "Orders"."O_Id"
 FROM "Persons" LEFT JOIN "Orders" ON "Persons"."P_Id" = "Orders"."P_Id"
 ORDER BY "Persons"."LastName"
als auch:

Code: Alles auswählen

SELECT "Persons"."LastName", "Persons"."FirstName", "Orders"."OrderNo", "O_Id"
 FROM "Persons" LEFT JOIN "Orders" ON "Persons"."P_Id" = "Orders"."P_Id"
 ORDER BY "Persons"."LastName"
liefern:

Code: Alles auswählen

LastName    FirstName    OrderNo    O_Id
Hansen      Ola          24562      4
Hansen      Ola          22456      3
Pettersen   Kari         44678      2
Pettersen   Kari         77895      1
Svendson    Tove                    0
Ein Primärschlüssel kann also abgefragt werden. Warum es in deinem Fall nicht klappt lässt sich aber ohne nähere Angaben von dir nicht beantworten.

Re: Wieso kann Primärschlüssel nicht abgefragt werden?

Verfasst: Di, 08.03.2011 10:12
von eve
Oh, ich hatte nicht nur die Spalte O_Id der Tabelle Orders, sondern auch die Spalte P_Id der Tabelle Persons abgefragt. In dem Fall kommt die Fehlermeldung. Wenn man P_Id aus der Tabelle Orders verwendet, dann geht es. Allerdings bleibt meine Frage trozdem in etwas abgeänderter Form bestehen. Warum kann mann O_Id nicht abfragen, wenn man zusätzlich P_Id aus einer anderen Tabelle abfragt?

Ich benutze übrigens OOo 3.3.0 und Windows XP/SP3

Re: Wieso kann Primärschlüssel nicht abgefragt werden?

Verfasst: Di, 08.03.2011 10:29
von hol.sten
eve hat geschrieben:Allerdings bleibt meine Frage trozdem in etwas abgeänderter Form bestehen. Warum kann mann O_Id nicht abfragen, wenn man zusätzlich P_Id aus einer anderen Tabelle abfragt?
Auch das klappt wunderbar bei mir:

Code: Alles auswählen

SELECT "Persons"."LastName", "Persons"."FirstName", "Orders"."OrderNo", "Orders"."O_Id", "Orders"."P_Id", "Persons"."P_Id" FROM "Persons" LEFT JOIN "Orders" ON "Persons"."P_Id" = "Orders"."P_Id" ORDER BY "Persons"."LastName"
Poste doch mal dein SQL.

Re: Wieso kann Primärschlüssel nicht abgefragt werden?

Verfasst: Di, 08.03.2011 12:18
von eve
Hier ist der SQL:

Code: Alles auswählen

SELECT "Persons"."LastName", "Persons"."FirstName", "Orders"."OrderNo", "Orders"."O_Id", "Persons"."P_Id" FROM { OJ "Persons" LEFT OUTER JOIN "Orders" ON "Persons"."P_Id" = "Orders"."P_Id" } ORDER BY "Persons"."LastName" ASC

Re: Wieso kann Primärschlüssel nicht abgefragt werden?

Verfasst: Di, 08.03.2011 12:30
von hol.sten
eve hat geschrieben:Hier ist der SQL:

Code: Alles auswählen

SELECT "Persons"."LastName", "Persons"."FirstName", "Orders"."OrderNo", "Orders"."O_Id", "Persons"."P_Id" FROM { OJ "Persons" LEFT OUTER JOIN "Orders" ON "Persons"."P_Id" = "Orders"."P_Id" } ORDER BY "Persons"."LastName" ASC
Bei mir erzeugt dieses SQL keinen Fehler sondern folgenden Output:

Code: Alles auswählen

LastName    FirstName    OrderNo    O_Id    P_Id
Hansen      Ola          24562      4       1
Hansen      Ola          22456      3       1
Pettersen   Kari         44678      2       3
Pettersen   Kari         77895      1       3
Svendson    Tove                    0       2

Re: Wieso kann Primärschlüssel nicht abgefragt werden?

Verfasst: Mi, 09.03.2011 07:37
von eve
Ich habe die Tabelle und die Abfrage jetzt extra noch mal neu erstellt, aber wieder das gleiche. Ich bekomme nur die Fehlermeldung: "„Die Dateninhalte konnten nicht geladen werden. No data is available“.
Aber zumindest weiß ich jetzt, daß es prinzipiell schon möglich sein sollte und der Fehler wo anders liegt. Ich hatte mich nämlich gewundert, warum eine solche Abfrage nicht möglich sein sollte.

Gruß,
eve