ubuntuusers.de

Fehlermeldung MYSQL #1054 - Unknown column

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

oxford

Avatar von oxford

Anmeldungsdatum:
7. Februar 2009

Beiträge: 125

Habe ein Problem mit INNER JOIN, ich will 2 Tabellen zusammen führen. Hier erstmal ein Beispiel das ich im Netz gefunden habe und nachdem ich mich orientiert habe:

SELECT    RechnungsNr,    KundenNr,    Betrag,    Rechnungen_Oktober.Kartennummer,    Firma, Inhaber,    Ablaufdatum FROM Kreditkarte INNER JOIN Rechnungen_Oktober ON Kreditkarte.Kartennummer = Rechnungen_Oktober.Kartennummer

Jetzt kommt mein SQL:

SELECT Red_F_T_Pro_ID, Inhalt, Email, Send_Email, Timecode_Email, Inhalt, Artikeltext, Branchentext, Branchentext_Alle, T_Titel_NrJ.T_Titel_NrJ_ID
FROM T_Artikel
INNER JOIN T_Titel_NrJ ON ( T_Artikel.Titel_NrJ_ID = T_Titel_NrJ.Titel_NrJ_ID )
WHERE Email LIKE "%27985%"
OR Red_F_T_Pro_ID LIKE "27985"
ORDER BY Red_F_T_Pro_ID DESC
LIMIT 10

Hier die Fehler Meldung:

#1054 - Unknown column 'T_Titel_NrJ.T_Titel_NrJ_ID' in 'field list'

PS: Die Tabellen, sowie Spalten sind alle 100% so benannt und vorhanden.

frabron

Anmeldungsdatum:
11. Februar 2007

Beiträge: 151

Sicher das du eine Tabelle "T_Titel_NrJ" hast? Die Syntax in deinem Join sollte lauten "... ON ... = Tabelle.Spalte ..."

Bei sowas bietet sich die Arbeit mit Aliasen an, dann kommt man auch nicht so schnell durcheinander 😉

oxford

(Themenstarter)
Avatar von oxford

Anmeldungsdatum:
7. Februar 2009

Beiträge: 125

Ja bin ich mir 100% sicher!

Habe die gleiche Abfrage mal anstatt mit JOIN mit WHERE gebaut. genau der gleiche Fehler

SELECT a.Red_F_T_Pro_ID, a.Inhalt, a.Email, a.Send_Email, a.Timecode_Email, a.Inhalt, a.Artikeltext, a.Branchentext, a.Branchentext_Alle, b.T_Titel_NrJ_ID
FROM T_Artikel a, T_Title_NrJ b
WHERE (a.Titel_NrJ_ID = b.T_Titel_NrJ_ID)
AND a.Email LIKE "%27985%"
OR a.Red_F_T_Pro_ID LIKE "27985"
ORDER BY a.Red_F_T_Pro_ID DESC
LIMIT 10 

#1146 - Table 'datenbankname_xy.T_Title_NrJ' doesn't exist 

Hier eine Abfrage die PHPMYADMIN ausführt wenn ich in der Tabelle T_Titel_NrJ absteigend sortiere

 SELECT *
FROM `T_Titel_NrJ`
ORDER BY `T_Titel_NrJ`.`Titel_NrJ_ID` ASC
LIMIT 0 , 30 

Abfrage funktioniert , es werden 30 Datensätze ausgegeben.

Bilder

frabron

Anmeldungsdatum:
11. Februar 2007

Beiträge: 151

Bist du dir sicher, dass die Klammern in der Join Bedingung richtig sind? Ich benutze nur Postgresql, deshalb weiss ich es nicht genau, aber wenn ich mir das Handbuch zu JOINs so ansehe, gehören die erst mal nicht dahin, sondern nur wenn man sowas macht

1
2
SELECT * FROM t1 LEFT JOIN (t2, t3, t4)
                 ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)

Dein erstes Beispiel hat die Klammern auch nicht. Schau auch mal ins Handbuch zu JOINs http://dev.mysql.com/doc/refman/5.0/en/join.html

oxford

(Themenstarter)
Avatar von oxford

Anmeldungsdatum:
7. Februar 2009

Beiträge: 125

SELECT a.Red_F_T_Pro_ID, a.Inhalt, a.Email, a.Send_Email, a.Timecode_Email, a.Inhalt, a.Artikeltext, a.Branchentext, a.Branchentext_Alle, b.T_Titel_NrJ_ID
FROM T_Artikel a
LEFT JOIN T_Title_NrJ b ON ( a.Titel_NrJ_ID = b.T_Titel_NrJ_ID )
WHERE a.Email LIKE "%27985%"
OR a.Red_F_T_Pro_ID LIKE "27985"
ORDER BY a.Red_F_T_Pro_ID DESC
LIMIT 10

oder

SELECT a.Red_F_T_Pro_ID, a.Inhalt, a.Email, a.Send_Email, a.Timecode_Email, a.Inhalt, a.Artikeltext, a.Branchentext, a.Branchentext_Alle, b.T_Titel_NrJ_ID
FROM T_Artikel a
LEFT JOIN T_Title_NrJ b ON a.Titel_NrJ_ID = b.T_Titel_NrJ_ID
WHERE a.Email LIKE "%27985%"
OR a.Red_F_T_Pro_ID LIKE "27985"
ORDER BY a.Red_F_T_Pro_ID DESC
LIMIT 10

kommt auf selbe hinaus, daran liegts nicht. Kapier ich alles irgendwie nicht da die Tab und die Spalte ja vorhanden sind.

frabron

Anmeldungsdatum:
11. Februar 2007

Beiträge: 151

Die beiden Spalten sind auch vom selben Typ?

Ansonsten gib mal nen Dump (Struktur) beider Tabellen, damit das mal nachvollziehbarer wird.

oxford

(Themenstarter)
Avatar von oxford

Anmeldungsdatum:
7. Februar 2009

Beiträge: 125

Ja, sind beide vom Typ int(11)

Hier die Strucktur:

Bilder

frabron

Anmeldungsdatum:
11. Februar 2007

Beiträge: 151

Vielleicht Probleme mit der Groß/Kleinschreibung der Spaltennamen? In Postgresql werden Spaltennamen immer als lowercase angesprochen, will man Groß/Kleinschreibung beachten, muss man den Spaltennamen maskieren. Hast du es mit den Backticks von Mysql schon mal probiert? PHPMyAdmin machts ja auch. Evt. von dem Query mal die Backticks entfernt und geschaut, was passiert?

Ansonsten habe ich nur noch den Tipp, den Query so weit zu vereinfachen, bis es geht und dann nach und nach wieder aufbauen.

melc

Anmeldungsdatum:
28. Dezember 2008

Beiträge: Zähle...

Wohnort: Karlsruhe

oxford schrieb:

Ja bin ich mir 100% sicher!

Vielleicht versteh ich das Problem nicht, aber hat sich die angehängten Bilder jemand nur ein einziges Mal angeschaut? Ich kann dort keine Tabelle namens T_Title_NrJ sehen, sondern nur eine namens T_Titel_NrJ. Und eine Spalte T_Titel_NrJ_ID gibst da auch nicht.

oxford

(Themenstarter)
Avatar von oxford

Anmeldungsdatum:
7. Februar 2009

Beiträge: 125

SELECT a.Red_F_T_Pro_ID, a.Inhalt, a.Email, a.Send_Email, a.Timecode_Email, a.Inhalt, a.Artikeltext, a.Branchentext, a.Branchentext_Alle, b.Titel_NrJ_ID
FROM T_Artikel a
LEFT JOIN T_Titel_NrJ b ON ( a.Titel_NrJ_ID = b.Titel_NrJ_ID )
WHERE a.Email LIKE "%27985%"
OR a.Red_F_T_Pro_ID LIKE "27985"
ORDER BY a.Red_F_T_Pro_ID DESC
LIMIT 10

work! Fehler war tatsächlich der Spalten Namen "T_" (kp wieso der mir da so rein gerutscht ist). Manchmal sieht man vor lauter Wald die Bäume nicht. Danke ☺

oxford

(Themenstarter)
Avatar von oxford

Anmeldungsdatum:
7. Februar 2009

Beiträge: 125

Da die Joins jetzt funktionieren habe ich die Abfrage noch weiter ausgebaut. Soweit funktioniert auch alles so wie es soll. Allerdings soll die ID (a.Red_F_T_Pro_ID) nur einmalig vorkommen, daher habe ich ein DISTINCT davor gesetzt, was allerdings nicht funktioniert.

Hier der Codeblock:

SELECT DISTINCT a.Red_F_T_Pro_ID, a.Inhalt, a.Email, a.Send_Email, a.Timecode_Email, a.Inhalt, a.Artikeltext, a.Branchentext, a.Branchentext_Alle, c.Titel, e.Lang_Br, f.NrJ
FROM T_Artikel a
LEFT JOIN T_Titel_NrJ b ON ( a.Titel_NrJ_ID = b.Titel_NrJ_ID )
LEFT JOIN T_Titel c ON ( b.Titel = c.Titel_ID )
LEFT JOIN T_Branchen_Artikel d ON ( a.Red_F_T_Pro_ID = d.Artikel_ID )
LEFT JOIN T_Branchen e ON ( d.Branchen_ID = e.Branchen_ID )
LEFT JOIN T_NrJ f ON ( b.NrJ_ID = f.NrJ_ID )
WHERE a.Email LIKE "%79%"
OR Red_F_T_Pro_ID LIKE "79"
ORDER BY Red_F_T_Pro_ID DESC
LIMIT 10 

Im Anhang findet ihr ein Screenshot der Ausgabe

Bilder

frabron

Anmeldungsdatum:
11. Februar 2007

Beiträge: 151

Ich vermute, das geht nicht weil in Lang_br noch unterschiedliche Werte drin sind - weiter wird Mysql die Datensätze nicht zusammenfassen können.

oxford

(Themenstarter)
Avatar von oxford

Anmeldungsdatum:
7. Februar 2009

Beiträge: 125

Kann man den QRY nicht so umschreiben das genau sowas nicht Auftritt? Dachte genau für solche Fälle wäre DISTINCT gedacht.

frabron

Anmeldungsdatum:
11. Februar 2007

Beiträge: 151

Lass die Spalte weg oder benutze Aggregate Funktionen. Evt. solltest du dich fragen, was du genau mit deinem Query abfragen möchtest und ob dein Datenmodell den Query zulässt - Stichwort Normalisierung. Es ist oft besser, kleinere Queries anstatt eines Riesenqueries zu machen. Das ist jetzt aber nur ein Schuss ins Blaue, ich kenne ja weder deine Datenbank, noch was du mit der Abfrage herausbekommen willst 😉 ☺

oxford

(Themenstarter)
Avatar von oxford

Anmeldungsdatum:
7. Februar 2009

Beiträge: 125

Jop mit Spalte weg lassen geht es.

Habe gerade noch einen anderen Fehler gefunden. Dieser SQL geht.

SELECT DISTINCT a.Red_F_T_Pro_ID, a.Inhalt, a.Email, a.Send_Email, a.Timecode_Email, a.Artikeltext, a.Branchentext, a.Branchentext_Alle, c.Titel, f.NrJ
FROM T_Artikel a
LEFT JOIN T_Titel_NrJ b ON ( a.Titel_NrJ_ID = b.Titel_NrJ_ID )
LEFT JOIN T_Titel c ON ( b.Titel = c.Titel_ID )
LEFT JOIN T_Branchen_Artikel d ON ( a.Red_F_T_Pro_ID = d.Artikel_ID )
LEFT JOIN T_Branchen e ON ( d.Branchen_ID = e.Branchen_ID )
LEFT JOIN T_NrJ f ON ( b.NrJ_ID = f.NrJ_ID )
WHERE a.Email IS NULL AND Send_Email IS NULL
LIMIT 10

Sobald ich aber nach irgend etwas Sortieren möchte. z.b. ORDER BY Red_F_T_Pro_ID wird der SQL nicht ausgeführt, ich bekomme auch keine Fehlermeldung sondern die MYSQL Datenbank schmiert mehr oder weniger komplett ab. Es kann erst wieder drauf zugegriffen werden nachdem ich den MYSQL Server neu gestartet habe (sudo /etc/init.d/mysql restart)

SELECT DISTINCT a.Red_F_T_Pro_ID, a.Inhalt, a.Email, a.Send_Email, a.Timecode_Email, a.Artikeltext, a.Branchentext, a.Branchentext_Alle, c.Titel, f.NrJ
FROM T_Artikel a
LEFT JOIN T_Titel_NrJ b ON ( a.Titel_NrJ_ID = b.Titel_NrJ_ID )
LEFT JOIN T_Titel c ON ( b.Titel = c.Titel_ID )
LEFT JOIN T_Branchen_Artikel d ON ( a.Red_F_T_Pro_ID = d.Artikel_ID )
LEFT JOIN T_Branchen e ON ( d.Branchen_ID = e.Branchen_ID )
LEFT JOIN T_NrJ f ON ( b.NrJ_ID = f.NrJ_ID )
WHERE a.Email IS NULL AND Send_Email IS NULL
ORDER BY Red_F_T_Pro_ID
LIMIT 10

In der Datenbank sind etwa 30.000 Einträge, meine Vermutung ist jetzt das es einfach zu viel für den MYSQL Server wird wenn er sie auch noch sortieren muss O_o anders kann ich es mir nicht erklären, da der selbe QRY ohne ORDER ja einbandfrei funktioniert.

Antworten |