View mit Join-Tabellen erzeugen

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

View mit Join-Tabellen erzeugen

Postby Erwin » 06. June 2007 16:58

Schönen Abend,

ich "spiele" mich da schon einige Stunden herum und kann im Web irgendwie keine Lösung finden. Folgendes Problem:

- Ich habe eine Tabelle mit Webbereichen (WebRng)
- Ich habe eine Tabelle mit Web-Subbereichen (WebSubRng)
- Ich hätte gerne EINEN View, in dem alle Felder beider Tabellen enthalten sind

Der MySQL-Befehl
Code: Select all
CREATE OR REPLACE VIEW MyDB.view_websubrng AS
SELECT *
FROM MyDB.websubrng SubRng
INNER JOIN MyDB.webrng Rng ON Rng.WebRng_ID = SubRng.WebRng_ID
WHERE Rng.recDel=0 and Rng.recUsed=1 and SubRng.recDel=0 and SubRng.recUsed=1
ORDER BY Rng.WebRng_KB, SubRng.WebSubRng_KB

erzeugt jedoch immer nur "#1060 - Duplicate column name 'WebRng_ID'".

Unter Oracle würde das so funktionierten. Wieso ist WebRng_ID doppelt? Die beiden kommen doch aus zwei versch. Tabellen?

Unsere Konfig:
- XAMPP 1.5.3a unter Win
- Apache 2.2.2 (Win32)
- MySQL 5.0.21
- PHP 5.1.4

Hat jemand von euch eine Lösung für das Problem?
Besten Dank im voraus und liebe Grüße.
User avatar
Erwin
 
Posts: 45
Joined: 30. December 2002 21:26
Location: Wien

Postby Hanspeter Thöni » 06. June 2007 20:20

Nun Oracle würde in diesem Falle wohl tabellenname.feld ausgeben

Mysql lässt dies so nicht zu.

Lösung: Anstelle von select *, die Felder einzeln aufführen (mit Tabellenname) und dafür sorgen dass das fragliche Feld nur von einer Tabelle kommt, oder bei der einen Tabelle das Feld mittels alias (AS) anders benennen.
Gruss Hanspeter
User avatar
Hanspeter Thöni
 
Posts: 233
Joined: 17. August 2004 10:29
Location: Schweiz

Postby Erwin » 07. June 2007 10:51

Hallo Hanspeter,

vielen Dank für Deine rasche Antwort. Ja, es stimmt, Oracle würde die Feldnamen genauso benennen und hätte kein Problem mit meinem SELECT-Statement.

Ich wollte einen möglichen Antworter meines Themas nicht durch Vorgaben einschränken, habe aber schon irgendwie befürchtet ;-), daß das explizite Anführen aller Felder wohl der einzige Ausweg sein wird. Ich habe aber insgeheim doch irgendwie gehofft, es gäbe noch eine andere (einfachere) Variante. Daß MySQL das nicht so umsetzen kann, halte ich für ein Manko, kann aber möglicherweise durchaus nachvollziehbare Ursachen haben (weiß nicht).

Danke jedenfalls nocheinmal.

Liebe Grüße in die Schweiz.
User avatar
Erwin
 
Posts: 45
Joined: 30. December 2002 21:26
Location: Wien

Postby Hanspeter Thöni » 08. June 2007 09:03

Nun, beim Anlagen einer View wird das select * grundsätzlich in die einzelnen Spalten übersetzt. Nachträgliches Erweitern der Tabelle hat daher keine Erweiterung der View zu Folge.
Somit ist die View so oder so neu zu erzeugen, wenn neue Spalten dazugekommen sind.

Einen 'normaler' Select (keine View) funktioniert ja auch mit Select *, in diesem Fall wird die Spalte doppelt (von beiden Tabellen) ausgegeben (jedoch ohne Tabellenname).
Gruss Hanspeter
User avatar
Hanspeter Thöni
 
Posts: 233
Joined: 17. August 2004 10:29
Location: Schweiz

Postby Erwin » 08. June 2007 22:58

Schönen verlängerten Nachmittag Hanspeter, ;-)

ja, stimmt, was Du sagst. Das hat mich auf die Idee gebracht, daß ich einen View zunächst ohne "inner join" erstelle und mir die Feldnamen der Haupttabelle einfach von MySQL erstellen lasse und danach (in in einem zweiten Lauf) erst die Felder der zweiten Tabelle manuell dazufüge, genauso wie den gewünschten "join" selbst.

Ist zwar ein wenig wie mit der rechten Hand die linke Schläfe kratzen, aber besser als nichts (bzw. selber tippseln) ... ;-)

Danke Dir, alles Liebe aus Wien.
User avatar
Erwin
 
Posts: 45
Joined: 30. December 2002 21:26
Location: Wien

Postby Hanspeter Thöni » 09. June 2007 07:14

Eine der beiden Tabellen kannst du ja schon mit * machen (tabellenname.*) und nur für die 2. Tabelle die Felder (ohne das doppelte) ergänzen.
Gruss Hanspeter
User avatar
Hanspeter Thöni
 
Posts: 233
Joined: 17. August 2004 10:29
Location: Schweiz


Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 17 guests