Mipe: Abfrage über mehrere Datenbanken

Hallo,

ich bräuchte eine Abfrage über zwei Tabellen, die aber leider in völlig unterschiedlichen Datenbanken liegen. Ist sowas prinzipiell möglich? Ich les immer viel mit UNION, aber das klappt bei mir irgendwie nicht.

Danke,
Mipe

  1. Hi Mipe,

    ich bräuchte eine Abfrage über zwei Tabellen, die aber leider in völlig unterschiedlichen Datenbanken liegen. Ist sowas prinzipiell möglich?

    was verstehst Du unter "verschiedene Datenbanken"?
    (Diese Bezeichnung hat beispielsweise bei Oracle7 eine völlig andere Bedeutung als bei mySQL.)

    Ich les immer viel mit UNION, aber das klappt bei mir irgendwie nicht.

    UNION würde Dir erlauben, eine Mengen-Vereinigung durchzuführen, wenn Dein RDBMS das unterstützen würde.
    Mit mehreren Datenbanken hat das allerdings nicht viel zu tun - genauso gut könntest Du eine temporäre Tabelle anlegen und in diese die Ergebnisse mehrerer Abfragen auf verschiedene Datenbanken (sofern dies in Deinem Universum möglich ist) nacheinander einfügen.
    Das Problem ist nicht, die Ergebnisse zu vereinigen, sondern sie überhaupt erst mal zu bekommen.

    Viele Grüße
          Michael

    --
    T'Pol: I apologize if I acted inappropriately.
    V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
    (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
    1. Ich hab schon wieder vergessen zu erwähnen, daß es sich um verschiedene Datenbanken auf unserem MS-SQL-Server handelt. Ist hier eine Abfrage über zwei Datenbanken möglich.

      z. B.

      Abfrage 1 liefert aus DB1:
      ID, Name, Vorname

      Abfrage 2 liefert aus DB2:
      ID,Strasse,PLZ,Ort

      Ich kombiniere in einem Aufwasch die Namen mit den Adressen anhand der ID.

      Mipe

      1. Hi Mipe!

        Abfrage 1 liefert aus DB1:
        ID, Name, Vorname
        Abfrage 2 liefert aus DB2:
        ID,Strasse,PLZ,Ort

        Diese Aussage ist ein wenig mißverständlich:
        Eine DB-Abfrage läuft ja über Tabellen einer Datenbank, nicht über die Datenbank als Organisationseinheit selbst.

        Wolltest Du nur zwei Tabellen auf die geschilderte Weise innerhalb einer Datenbank verknüpfen, geht das recht komfortabel über einen einfachen Left-Join.

        Also am Beispiel MySQL:
        "SELECT
            FROM
                tabelle_namen AS n,
                tabelle_details AS d
            WHERE
                n.ID = d.ID"

        Zwei Tabellen aus zwei verschiedenen Datenbanken zu verknüpfen geht direkt nicht.
        Hier würde sich die Erstellung einer temporären Tabelle anbieten.

        So long,
        Christian

        1. Hi, hallo

          so einfach ist das "Nein, geht nicht" auch nicht ...

          auch MS-SQL, da bin ich mir sicher, wird es über (mindestens) stored Procedures erlauben Tables zwischen Datenbanken zu verlinken. MS Access kann dies als kleines DBMS. Die Lösung sollte hier im DBMS selber liegen.

          aber was machen solch nah-verwandten Daten in unterschiedlichen Datenbanken??

          ansonsten, wenn du mit .net (ASP.net und ADO.net) arbeitest, dann kannst du dir dein DataSet auch aus beliebigen Quellen zusammenbauen. erfordert aber shcon ziemliche Kenntnisse der Materie

          Tschau, tschüß,
          Frank

        2. Hi Christian,

          Zwei Tabellen aus zwei verschiedenen Datenbanken zu verknüpfen geht direkt nicht.

          das eben kommt darauf an, was das jeweilige RDMBS unter dem Begriff "Datenbank" versteht.

          Bei mySQL kannst Du Tabellen mit dem "Datenbank"-Name präfixen - dort betreibt ein RDBMS-daemon eben beliebig viele "Datenbanken" (was aus Sicht des Entitlements sogar Sinn macht).

          Bei Oracle 7 (und wahrscheinlich auch neueren Versionen) betreibt ein RDBMS-daemon nur eine einzige "Datenbank" - das Berechtigungskonzept wird dort anders gelöst (mit GRANTs auf Tablespaces etc. - dies wiederum kennen die normalen Tabellentreiber von mySQL nicht).

          Eben deshalb fragte ich ja, was "Datenbank" bei dem verwendeten RDBMS (das zu diesem Zeitpunkt noch nicht mal genannt war) bedeutet ... zu M$-SQL kann ich leider konkret nichts sagen.

          Viele Grüße
                Michael

          --
          T'Pol: I apologize if I acted inappropriately.
          V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
          (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
      2. Hallo,

        Ich hab schon wieder vergessen zu erwähnen, daß es sich um verschiedene Datenbanken auf unserem MS-SQL-Server handelt. Ist hier eine Abfrage über zwei Datenbanken möglich.

        Jetzt wäre noch zu klären, ob beide Datenbanken auf einer Maschine laufen oder nicht, und welche Version des MS-SQL-server eingesetzt wird.

        'Datenbanken' in diesem DBMS sind eine Organisatorische Einheit von mehreren Tabellen, die, solange sie auf einem Rechner untergebrahct sind, jederzeit miteinander verknüpft werden können. Dazu muß man nur die Tabelle voll qualifiziert angeben(mit datenbank.besitzer.tabelle).
        Neuere Versionen (frühestens ab Version 7) können auch, unter bestimmten Umständen, auf fremde Rechner zugreifen. Dann mußt Du server.datenbank.besitzer.tabelle angeben.

        Näheres kannst Du aber der beiliegenden Dokumenatation entnehmen. (Vor allem, was Fernzugriffe angeht, das würde den Rahmen hier wirklich sprengen)

        Grüße
          Klaus