create table test2 ( c integer primary key, a integer not null);
insert into test2(1, 1);
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 |
-- +---+------+---+
SELECT
`c`,
`b`
FROM `test2`
LEFT OUTER JOIN `test`
ON `c` = `a`
| 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
|