.NET C# Java Javascript Exception

 | 
Frage stellen Fragen Themen Mitglieder Abzeichen RSS-Feed
0
Kann man Relationen über mehrere Datenbanken (auf demselben Server) haben?
Themen:
08.09.09
Kommentieren - Für Rückfragen oder Anmerkungen
2 Antworten
3
Ja, denn mit mysql ist es möglich ein Query über verschiedene Datenbanken abzusetzen. Aus diesem Query kann man dann eine View machen und dann hat mal eine Relation über mehrere Datenbanken. (Achtung! Nicht jedes RDBMS unterstützt das, PostgreSQL z.B. nicht)

Beispiel:

In DB test2:
create table test2 ( c integer primary key, a integer not null);
insert into test2(1, 1);


In DB test:
create table test ( a integer primary key, b integer);
insert into test values(1,2);
create view x as select * from test natural join test2.test2;

select * from x;

-- Ergebnis
-- +---+------+---+
-- | a | b | c |
-- +---+------+---+
-- | 1 | 2 | 1 |
-- +---+------+---+
08.09.09
weissi 101 1 2
weissi 101 1 2
0
Um dann beide Datenbanken ansprechen zu können benutzt man JOINs.

Ein Join auf das Beispiel von weissi bezogen würde so aussehen:

SELECT
`c`,
`b`
FROM `test2`
LEFT OUTER JOIN `test`
ON `c` = `a`


Mit dem LEFT OUTER JOIN bezieht man sich dann auf Spalte c und a aus 2 verschiedenen Datenbanken. Die ON Klausel bewirkt, dass nur Datensätze selektiert werden, wo c un b gleich sind.

Ich hoffe, dass hat dir geholfen.
08.09.09
darkdust 451 1 5
darkdust 451 1 5
1
Bei dieser Abfrage wird der Server erwarten, dass beide Tabellen in ein- und derselben Datenbank liegen. Um die Datenbank zu unterscheiden fehlt hier passende Kennzeichner
...
FROM datenbank2.test
LEFT OUTER JOIN datenbank2.test
...
P.S.: Die komischen Backticks (`) sind ein unnötiger Kropf - man sollte sie nur verwenden, wenn man unbedingt Sonderzeichen oder reservierte Worte in Bezeichnern hat. Und das sollte man wiederum ebenfalls vermeiden ;)
FalkP 08.09.09
Außerdem ist (wenn man beim Eingangsbeispiel bleibt) der Feldbezeichner a nicht eindeutig (ein Feld a gibt es in beiden Tabellen). Hier muß also zusätzlich der Feldname mit Tabellen UND Datenbanknamen qualifiziert werden (es sei den man vergibt einen Alias für die Tabelle, dann genügt der Alias).
...
ON c = datenbank1.test.a
FalkP 08.09.09
1
Die komischen Backticks helfen dem Menschen beim Lesen und dem Parser beim Parsen. Dann weiß er nämlich das der nachfolgende Text kein Keyword ist, sondern ein Name.
Man kann die natürlich auch weglassen und ihn in das aus der Symboltablle heraussuchen lassen.

Cheers
tomahlak 08.09.09
Hat jeder so seine Vorlieben ;) Mich stören sie eher beim Lesen und ich ziehe es vor meine Bezeichner ordentlich (z.B. mit sprechenden Aliasen) zu qualifizieren (Das hilft dem Parser wahrscheinlich mehr). Und (mal abgesehen von Unterschieden im SQL-Dialekt) kannst du ja mal versuchen so ein "Backtick-Script" auf einem anderen Server (z.B. Oracle) laufen zu lassen.
FalkP 09.09.09
Deine Antwort
Entweder einloggen... ...oder ohne Wartezeit registrieren
Name
Passwort
Passwort wiederholen
E-Mail
Geworben von


Login mit OpenID

Mit einem OpenID-Account kannst Du dich auf allen Webseiten anmelden, die OpenID unterstützen. Du hast bereits ein Benutzerkonto bei einem der folgenden Provider? Dann kannst Du dich direkt hier damit registrieren.


OpenID-Provider anklicken: