| 

.NET C# Java Javascript Exception

0
Kann man Relationen über mehrere Datenbanken (auf demselben Server) haben?
News:
08.09.2009
harry-bo 1 1
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.2009
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.2009
darkdust 451 2 6
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.2009
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.2009
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.2009
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.2009

Stelle deine Mysql-Frage jetzt!