Rant: MySQL-Fehlermeldung

creativeone

Benutzer
Beiträge
17
Ich hasse Mysql Fehlermeldungen! Man schreibt einen komplizierten Select über 25 Zeilen mit zwei CTEs und alles, was man von Mysql vorgeschmissen bekommt ist ein lapidares

#1241 - Operand sollte 1 Spalte(n) enthalten

Ja fein! Keine Zeilennummer, kein Hinweis wo ungefähr, toll!

Natürlich liegt der Fehler bei mir, aber jetzt darf ich erst mal das ganze Statement in einzelteile zerlegen um es stückweise auszuführen. Toll!
 
Werbung:
Tja, was soll ich sagen?

Vielleicht bildest Du die Tabellen mit PostgreSQL nach und das Select und schaust, wo PostgreSQL den Fehler anzeigt?
 
Operand klingt ja schon relativ spezifisch. Wieviel Operanden gibt es in deinem Statement? Erfahrungsgemäß kommt man bei diesen Fehlermeldungen mit Logik aber auch nicht unbedingt weiter ...
Es ist natürlich ein kleines Trauerspiel mit MySQL. Zerlegung wäre auch mein Tip gewesen.
Ich möchte natürlich nicht provozieren, dass Du ohne Not weiter mit MySQL arbeitest, weil sich wieder mal irgendwo eine Lösung findet, aber die Problematik, eine unverständliche Fehlermeldung zu lösen, gibt es glaub ich immer wieder beim "Programmieren".

Der Text der Meldung im Zusammenhang mit SQL deutet auf eine ungleiche Anzahl N-Tupel in einem Vergleichskriterium hin. Das wäre zumindest naheliegend, kann aber wiederum irreführend sein.
Es gibt noch eine einfache Möglichkeit, das Naheliegende zu finden, indem man die originale Fehlermeldung oder auch nur die Fehlernummer sucht und sich typische Fehlerfälle anschaut. Ergibt hier z.B. überflüssige, also falsche Klammerung in(nerhalb) der Select Clause.
(Also ohne Kenntnis Deines Statements, einfach nur aufgrund der Tatsache, dass es eine beliebte Ursache für diese Fehlermedlung ist. Dafür würde auch sprechen, dass es eher ein Anfänger- oder Flüchtigkeitsfehler ist.)
 
Erst mal ein "frohes neues Jahr" dabadepdu,

ich glaube du hast deine Frage in die falsche Rubrik gepostet. Wesentlich besser würde sich die Rublick "Glaskugel" oder "Wettevorhersage" .

Was erwartes du?

Die Fehlermeldung bedeutet das die irgendeins deiner Selects oder Sub-selects mehr als eine eine Spalte (Column) zurück liefert und du diese z.B. beim JOIN mit EINEM anderen Wert vergleichst.
Dies kann aber mehrer Ursachen haben. Auch eine Klammer(paar) zu wenig. Ich bin mir natürlich sicher das PostgreSQL das natürlich weis was du schreiben willst und dir anzeigt was du meinst (und schwimmt auch bestimmt in Milch)😉😉.

Aber um Fehler zu finden sollte man schon die notwendigen Skripte mitliefern um eine sinnvolle Antwort zu bekommen.

Gruß Bernd
 
Was erwartes du?

Die Fehlermeldung bedeutet das die irgendeins deiner Selects oder Sub-selects mehr als eine eine Spalte (Column) zurück liefert und du diese z.B. beim JOIN mit EINEM anderen Wert vergleichst.
Dies kann aber mehrer Ursachen haben. Auch eine Klammer(paar) zu wenig.
Ich erwarte nahezu gar nichts. Das habe ich glaube ich auch gezeigt, indem ich selbst ohne Angabe des problematischen Statements mögliche Fehlerquellen und Strategien genannt habe, jenseits einer Zerlegung einem solchen Fehler auf die Schliche zu kommen. Ich habe sogar noch dazugeschrieben, dass meine Vorschläge zur Vorgehensweise nicht nur für MySQL praktisch sind. Sogar andere Systeme liefern manchmal unverständliche Fehlermeldungen, nicht nur MySQL.
Dass Postgres hier eine Ausnahme bildet und niemals unverständliche Fehlermeldungen liefert, weiß mindestens der Kenner, nicht jedoch jeder Anfänger. ;)
Am Ende ist es doch so, ich helfe immer gern, wenn ich kann. Aber wie zart angedeutet im Falle MySQL mit gesträubten Nackenhaaren.
Nicht sicher, hier jedenfalls genau wie Du!

Ich ziehe dabei in Betracht, dass manche Statements nicht gern veröffentlicht werden wollen.

Und nun zur Feier des Tages noch ein Beispiel. Wer hätte gedacht, dass dieses falsche Statement:
Code:
insert into a (b,c,d)
select (b, c,d) from a where b='b';
in MySQL die Fehlermeldung liefert:
Operand sollte 1 Spalte(n) enthalten

Und last but not least, die Fehlermeldung von Postgres bei identischem Code:
Code:
ERROR:  INSERT has more target columns than expressions LINE 1: insert into a (b,c,d)                       
^ HINT:  The insertion source is a row expression containing the same number of columns expected by the INSERT. 
Did you accidentally use extra parentheses?

Und weil's so schön ist, noch eine automatische Deutschübersetzung:
Code:
ERROR: INSERT hat mehr Zielspalten als Ausdrücke ZEILE 1: insert into a (b,c,d)                       
TIPP: Die Einfügequelle ist ein Zeilenausdruck, der die gleiche Anzahl von Spalten enthält, die von INSERT erwartet werden. 
Haben Sie versehentlich zusätzliche Klammern verwendet?
 
Natürlich alles Glaskugel, die hat zum 1.1., am Ende aller Jahresrückblicke doch sowieso Hochsaison und ist frisch entstaubt.
 
Werbung:
Zurück
Oben