BlackBoard (http://www.black-board.net/index.php)
- Design, Programmierung & Entwicklung (http://www.black-board.net/board.php?boardid=55)
-- Programmieren (http://www.black-board.net/board.php?boardid=4)
--- mysql - Problem mit n:m verknüpfungstabelle (http://www.black-board.net/thread.php?threadid=21673)


Geschrieben von species8472 am 27.12.2005 um 12:18:

  mysql - Problem mit n:m verknüpfungstabelle

Hab ein Problem mit einer mysql-Abfrage

Ich nutze mysql 5 und MYISAM als Tabellentyp

Undzwar habe ich 2 Tabellen die in einer n:m beziehung stehen, die n:m-Verknüpfungstabelle steht wiederum in einer n:m-Beziehung mit einer dritten Tabelle.

Momentan sieht die Abfrage wie folgt aus:
code:
1:
2:
3:
4:
5:
6:
7:
SELECT op.name, op.uniqueitem , op.weight, b.bonusscore, b.onwhat, p.name Prerequisite
  FROM tblotherpossessions op
  left join(tblpossessionsbonuses pb, tblbonuses b)
  on op.idotherpossession=pb.idfiotherpossession and b.idbonus=pb.idfibonus
  left join (tblprerequisitesotherpossessionsbonuses popb, tblprequisites p)
  on p.idprerequisite=popb.idfiprerequisite and pb.idfibonus=popb.idfibonus and pb.idfiotherpossession=popb.idfiotherpossession;


Die Fehlermeldung lautet:
Zitat:
1052: Column 'idOtherPossession' in field list is ambiguous


Das Datenbankmodell kann cih leider nicht anfügen, da ich das jpg nicht klein genug bekomme, daher füge ich unten den SQL-Code der betroffenen Tabellen an:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
DROP TABLE IF EXISTS `dandd`.`tblotherpossessions`;
CREATE TABLE  `dandd`.`tblotherpossessions` (
  `idOtherPossession` int(11) NOT NULL auto_increment,
  `UniqueItem` bit(1) default NULL,
  `Name` varchar(20) default NULL,
  `Weight` int(11) default NULL,
  PRIMARY KEY  (`idOtherPossession`),
  UNIQUE KEY `XPKtblOtherPossessions` (`idOtherPossession`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `dandd`.`tblbonuses`;
CREATE TABLE  `dandd`.`tblbonuses` (
  `idBonus` int(11) NOT NULL auto_increment,
  `BonusScore` int(11) default NULL,
  `onWhat` char(20) default NULL,
  PRIMARY KEY  (`idBonus`),
  UNIQUE KEY `XPKtblBonuses` (`idBonus`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `dandd`.`tblpossessionsbonuses`;
CREATE TABLE  `dandd`.`tblpossessionsbonuses` (
  `idfiBonus` int(11) NOT NULL default '0',
  `idfiOtherPossession` int(11) NOT NULL default '0',
  PRIMARY KEY  (`idfiBonus`,`idfiOtherPossession`),
  UNIQUE KEY `XPKtblPossessionsBonuses` (`idfiBonus`,`idfiOtherPossession`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `dandd`.`tblprerequisitesotherpossessionsbonuses`;
CREATE TABLE  `dandd`.`tblprerequisitesotherpossessionsbonuses` (
  `idfiPrerequisite` int(11) NOT NULL default '0',
  `idfiBonus` int(11) NOT NULL default '0',
  `idOtherPossession` int(11) NOT NULL default '0',
  PRIMARY KEY  (`idfiPrerequisite`,`idfiBonus`,`idOtherPossession`),
  UNIQUE KEY `XPKtblPrerequisitesOtherPossessionsBonuses` (`idfiPrerequisite`,`idfiBonus`,`idOtherPossession`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;




Ich hoffe es kann mir jemand helfen.



Geschrieben von LX am 27.12.2005 um 17:48:

Achtung

1. WTF? Was sind das für Tabellennamen? Da soll noch einer durchsehen Augenzwinkern

2. Das Datenbankschema ist nicht vollständig, die Tabelle tblprequisites fehlt und die Spalte popb.idfiotherpossession aus deiner SELECT-Query gibt es nicht in der benannten Tabelle.

3. Unabhängig davon sehe ich noch nicht, wo der Fehler steckt. Die Meldung besagt ja, dass einer Spalte aus deiner Query keine Tabelle eindeutig zugeordnet werden konnte... aber das sollte eigentlich der Fall sein.



Geschrieben von species8472 am 27.12.2005 um 21:42:

 

Habe den Fehler gefunden, bzw. ich habe ihn beseitigt, habe aus idotherpossession idfiotherpossession gemacht, dann gings(hatte das eigentlich auch in der Abfrage stehen, hab wohl aus dem falschen Fenster rauskopiert, dafür muss ich mich entschuldigen).

Irgendwie scheint mySQL es nicht zu mögen, wenn man einem Teil eines zusammengesetzten Primärschlüssel den selben Namen wie einem einzelnen gibt(anders kann ich mir den Fehler nicht erklären).

Zu den Tabellennamen, die machen Sinn, der lässt sich nur ohne die restlichen nicht ersehen.

Die Scheiss-Syntax des SQL-Codes kam daher, dass ich meinen originalen Code bei einem Computerabsturz verloren habe und ich den hierfür per reverse-engineering wiederhergestellt habe.


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH