AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird View inner join

Ein Thema von Perlsau · begonnen am 28. Jul 2013 · letzter Beitrag vom 29. Jul 2013
 
Perlsau
(Gast)

n/a Beiträge
 
#1

Firebird View inner join

  Alt 28. Jul 2013, 17:06
Datenbank: Firebird • Version: 2.5 • Zugriff über: IbDac
Hallo Fachleute,

ich muß ein wenig ausholen, um mein kleines Problem zu schildern:

Gegeben ist eine Firebird-Datenbank mit einer Log-Tabelle. In dieser Tabelle gibt es einmal eine Spalte Benutzer, die einen Index auf den Benutzernamen (IDX_BENUTZER) der Tabelle BENUTZER enthält. Dann gibt es in der Log-Tabelle aber noch eine weitere Spalte, die ebenfalls einen Index auf den Benutzernamen der Tabelle BENUTZER enthält. Etwas anschaulicher:
Code:
Tabelle USER_LOG

   IDX_USER_LOG : Integer (Autowert)
   BENUTZER     : INTEGER;
   ZIELUSER     : INTEGER;
... und noch ein paar weitere Spalten, die hier aber nicht relevant sind ...
In den beiden Spalten sind logischerweise auch verschiedene Indizes abgelegt (nicht immer, aber immer öfter).

Für des Administrators Überblick benötige ich eine Grid-Darstellung, in der nicht nur die Benutzer-Indizes dargestellt werden, sondern die Benutzernamen. Die holte ich mir via Lookupfeld aus der Benutzertabelle:
Code:
Tabelle BENUTZER

   IDX_BENUTZER : Integer (Autowert)
   B_NAME       : VarChar(30)
... und noch ein paar weitere Spalten, die ebenfalls nicht relevant sind ...
Da der Administrator seine Log-Tabelle auch sortieren können möchte, treten erhebliche Verzögerungen auf, wenn nach einem der Lookup-Felder sortiert werden muß. Als Lösung habe ich mir ein View in der Datenbank erstellt und siehe da: die Sortierung ist nun erheblich schneller bei den Lookup-Feldern. Doch ein Problem gibt es bei diesem View noch immer: Ich kann zwar die Spalte BENUTZER joinen, nicht jedoch zusätzlich noch die Spalte ZIELUSER:
Code:
CREATE OR ALTER VIEW V_LOGS(
    L_INDEX,
    L_BENUTZER,
    L_PASS,
    L_AKTION,
    L_ZEIT,
    L_ZIEL)
AS
select
    USER_LOG.IDX_USER_LOG,
    BENUTZER.B_NAME,
    BENUTZER.B_PASS,
    AKTIONEN.AKTION,
    USER_LOG.AKTIONZEIT,
    USER_LOG.ZIELUSER

from USER_LOG
inner join BENUTZER on BENUTZER.IDX_BENUTZER = USER_LOG.BENUTZER
inner join AKTIONEN on AKTIONEN.IDX_AKTIONEN = USER_LOG.AKTION
;
So funktioniert das View, doch wird natürlich der Zieluser nur als Index angezeigt. Wenn ich statt der letzten Zeile im Select-Abschnitt statt USER_LOG.ZIELUSER noch einmal BENUTZER.B_NAME schreibe, erhalte ich zwar keine Fehlermeldung vom Firebird-Server, doch wird nun in der Spalte L_ZIEL der Wert der Spalte L_BENUTZER eingetragen, was logisch ist. Um das zu vermeiden, habe ich im From-Sektor des Vies noch diese Zeile eingefügt:
Code:
...
AS
select
    USER_LOG.IDX_USER_LOG,
    BENUTZER.B_NAME,
    BENUTZER.B_PASS,
    AKTIONEN.AKTION,
    USER_LOG.AKTIONZEIT,
    BENUTZER.B_NAME

from USER_LOG
inner join BENUTZER on BENUTZER.IDX_BENUTZER = USER_LOG.BENUTZER
inner join BENUTZER on BENUTZER.IDX_BENUTZER = USER_LOG.ZIELUSER
inner join AKTIONEN on AKTIONEN.IDX_AKTIONEN = USER_LOG.AKTION
;
Das erzeugt diese Fehlermeldung:
Code:
Undefined name.
Dynamic SQL Error.
SQL error code = -204.
Ambiguous field name between table BENUTZER and table BENUTZER .
IDX_BENUTZER.
Nun meine Frage: Gibt es eine Möglichkeit, in der Spalte L_ZIEL den richtigen Benutzernamen anzuzeigen? Beim Sortieren nach dem Feld Zieluser tritt nämlich wieder die altbekannte Verzögerung auf, da ich im DBGrid hier natürlich wieder ein Lookup-Feld verwenden muß.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz