Problem mit 2 Tabellen

MySQL, PostgreSQL, SQLite
newbie1
Posts: 6
Joined: 2003-11-17 15:36

Problem mit 2 Tabellen

Post by newbie1 » 2003-11-17 15:40

Hallo!
Ich komme direkt zu meinem Problem.

Habe 2 Tabellen in der Mysql-DB.

Tabelle1 = kategorie (INT)
Tabelle2 = katnr (INT), katname (VARCHAR)

Tabelle1.kategorie = Tabelle2.katnr (haben gleiche Zahlenwerte)

Tabelle2.katname >> hier sind viele Kategoriennamen drin, z-B. Auto, Heizung, etc

Nun möchte ich in der Tabelle1 ein neues Feld hinzufügen, und dort den "Tabelle2.katname" importieren. Dabei muss mit den beiden Tabellen verglichen werden. Die bestehenden Zahlen (Tabelle1.kategorie) müssen (Tabelle2.katnr) entsprechen.

Ich hoffe, ich habbs verständlich beschrieben, bin noch Newbie.

Besser wäre, wenn ich direkt in das Feld: Tabelle1.kategorie die Spalten Tabelle2.katname importieren könnte und die Zahlen durch die Kategorienamen ersetzen könnte.

Versucht habe ich es schon mit zahlreichen SQL-statements, aber erfolglos, weiss nicht mehr weiter.

Z.B:
UPDATE Tabelle1 AS t1, tabelle2 AS t2 SET t1.kategorie = t2.katname WHERE
t2.katnr ='t1.kategorie'



Bitte um Tip!

Gruß

r00ty
Posts: 747
Joined: 2003-03-17 15:32

Re: Problem mit 2 Tabellen

Post by r00ty » 2003-11-17 19:09

also ich kapiers absolut nicht was du machen willst....

und dein

Code: Select all

SET t1.kategorie = t2.katname
ist nicht so gelungen da du hier einem INT nen VARCHAR zuweist

newbie1
Posts: 6
Joined: 2003-11-17 15:36

Hi

Post by newbie1 » 2003-11-17 20:01

Hi!

Also ich will die Tabelle2 weghaben. Die Kategorien-Namen (VARCHAR) aus der Tabelle2 sollen in der Tabelle1 als neues Feld rein oder man ersetzt den vorhandenen "kategorie"- (INT)-Feld der Tabelle1 direkt durch das Feld "katname" (VARCHAR) der Tabelle2.

muss ich da spezielles Script für basteln oder kann man das mit einfachem Mysql-Statement löscen?

Wenn ich mich unverständlich ausgedrückt habe, werde ich versuchen es noch einfacher zu machen :)


Gruß :-D

aschommer
Posts: 13
Joined: 2003-10-21 13:03
Location: Meerbusch

Re: Problem mit 2 Tabellen

Post by aschommer » 2003-11-18 15:36

(Ich nehme mal an, in Wirklichkeit hat zumindest Tabelle1 noch mehr Felder - sonst könntest Du die doch einfach löschen und direkt auf Tabelle2 zugreifen)

Das mit dem Update sieht nicht schlecht aus; Du mußt die "Ziel-Spalte" aber auch explizit anlegen:

Code: Select all

alter table Tabelle1 add (katname varchar(?));
(die Breite von katname mußt Du natürlich einsetzen, kein Fragezeichen).

Danach sollte das Update gehen - bis auf die Anführungszeichen. r00ty hat Recht: einfach weglassen. So, wie's da steht, würdest du in Tabelle2 nach Zeilen suchen, deren katnr dem Text "t1.kategorie" gleicht - schwer zu finden.

newbie1
Posts: 6
Joined: 2003-11-17 15:36

Hi!

Post by newbie1 » 2003-11-18 17:46

Also das mit:
alter table Tabelle1 add (name varchar(255)); klappt gut, genauso kann ich manuell ein neues Feld hinzufügen, aber bei UPDATE kommt Fehler.

Ich versuche nochmal mein Prob ausführlicher darzustellen: :cry:

Struktur der Tabelle1:

CREATE TABLE `Tabelle1` (
`tid` int(10) NOT NULL auto_increment,
`eid` int(10) NOT NULL default '0',
`uname` varchar(255) NOT NULL default '',
`tel` varchar(15) default NULL,
`fax` varchar(15) default NULL,
`email` varchar(50) default NULL,
`web` varchar(255) default NULL,
`catnr` int(11) NOT NULL default '0',
PRIMARY KEY (`tid`)
) TYPE=MyISAM AUTO_INCREMENT=100 ;

- 100 Einträge/Zeilen
----------------------------------------------------
Struktur der Tabelle2:
CREATE TABLE `Tabelle2` (
`catnr` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
UNIQUE KEY `name` (`name`),
UNIQUE KEY `catnr` (`catnr`)
) TYPE=MyISAM AUTO_INCREMENT=50 ;

50 Einträge/Zeilen
------------------------------------------------------

Die Spalte "catnr" in der Tabelle1 ist gleich mit der "catnr" der Tabelle2
Anhand der "catnr" werden später in der SELECT FROM Anweisung die beiden Tabellen behandelt um der Daten der Tabelle1 die entsprechenden Kategorienamen aus der Tabelle2 zugeordnet - Feld "name"
Das Feld "name" in der Tabelle2 beinhaltet die Begriffe (Auto, Frisör, Lackiererei, ... etc ...)

Jetzt möchte ich die Namen aus der Tabelle2 anhand der "catnr" in die Tabelle1 einfügen und die Tabelle2 später löschen. In der Tabelle1 würde ich anschließend das "catnr" Feld löschen.

Wie geht das am besten?, sonst muss ich auf Mysql 4. aktualisieren.
und die Punkt-Methode anwenden.

:roll: ------------------------------------------------


Gruß

aschommer
Posts: 13
Joined: 2003-10-21 13:03
Location: Meerbusch

Was für'n Fehler eigentlich ?

Post by aschommer » 2003-11-19 08:18

Ehrlich gesagt bin ich etwas ratlos.
Wie lautet eigentlich die Fehlermeldung (und: bei welchem SQL-Statement genau bekommst Du sie) ? Oder gibt's keinen Fehler und kein Ergebnis ?
(Ich weiß, Fehlermeldungen sind nicht MySQL's Stärke ...)

olaf.dietsche
Posts: 401
Joined: 2002-12-19 02:06
Location: Siegburg

Re: Problem mit 2 Tabellen

Post by olaf.dietsche » 2003-11-22 10:26

In meinem schlauen Buch steht sowas ähnliches wie das hier

Code: Select all

update t1 set name = ( select t2.name from t2 where t2.catnr = t1.catnr )
Allerdings funktioniert das mit mysql nicht.
Eventuell kommst du mit einer temporären Tabelle und einem join über t1, t2 weiter; aber nicht vergessen: zuerst ein BACKUP machen

Code: Select all

create temporary table t3 (
tid int,
...
catnr int,
name varchar(255) );

insert into t3 select t1.tid, ..., t1.catnr, t2.name from t1, t2 where t1.catnr = t2.catnr;
delete from t1;
insert into t1 select * from t3;

newbie1
Posts: 6
Joined: 2003-11-17 15:36

Hi! Lösung

Post by newbie1 » 2003-11-25 16:03

Ich habs auch damit hinbekommen:

CREATE TABLE Tabelle3 SELECT Tabelle1. * , Tabelle2. *
FROM Tabelle1
INNER JOIN Tabelle2 ON Tabelle2.nr = Tabelle1.nr


Gruß :P