![]() |
SQL: UNION-Befehl (mySQL-Fehler?)
Hallo!
Es geht um folgende SQL-Anweisung:
SQL-Code:
Bei der Rückgabe vom Server werden die jeweiligen fest übergebenen Strings nach 8 Zeichen, welches der Länge des ersten fest übergegebenen Feldes darstellt, einfach abgeschnitten.
SELECT 'Projekte' as 'Info', COUNT(*) as 'Anzahl' from foprosql
UNION SELECT 'Gutachten', COUNT(*) from gutachten UNION SELECT 'Beiträge', COUNT(*) from beitrag UNION SELECT 'Gäste', COUNT(*) from gast UNION SELECT 'Institute', COUNT(*) from institute UNION SELECT 'Poster', COUNT(*) from poster UNION SELECT 'Veranstaltungen', COUNT(*) from veranstaltung UNION SELECT 'Zusammenarbeit Ausland', COUNT(*) from wza UNION SELECT 'Zusammenarbeit Inland', COUNT(*) from wzi UNION SELECT 'Forum Pflanze:', COUNT(*) from forum_pflanze Ich denke, dass das ganze vielleicht mit der Union-Anweisung und den festen Strings zusammenhängt. Reproduzierbar ist das Ganze mit folgender einfacher SQL-Anweisung (ohne Tabellenbezug zum Ausprobieren):
SQL-Code:
Eigentlich erwarte ich hier eine Rückgabe in folgender Form:
SELECT 'abcd'
UNION SELECT '1234567890' abcd 1234567890 Tatsächlich erhalte ich aber folgende Rückgabe: abcd 1234 Wie bereits erwähnt ist die Länge der rückgegebenen Spalte nur so lang wie die Anzahl der Zeichen des in ' ' übergebeben Textes. Das ganze passiert auch bei echten Abfragen in Verbindung mit Union:
SQL-Code:
Die Rückgabe der Spalte ist nun immer höchstens 4 Zeichen lang.
SELECT '1234'
UNION SELECT irgendwas FROM tabelle Wo liegt der Fehler? Oder liegt es an mySQL (4.0.15) Danke für Hilfe, Christian |
Re: SQL: UNION-Befehl (mySQL-Fehler?)
Union erzwingt soweit ich weiß gleiche Datentypen.Edit: und richtet sich bei der Typbestimmung nach dem dem 1.Select. Was Du schilderst, sieht so aus, als ob MySQL an dieser Stelle die Zeichenfolge
'1234' als Varchar(4) behandelt und alle folgenden Spalten in Varchar(4) convertiert, d.h. abschneidet. Versuch mal, alle Felder zu Varchar(255) zu convertieren und schau ob es dann schnuckelt. Gruß |
Re: SQL: UNION-Befehl (mySQL-Fehler?)
Hallo!
Schonmal vielen Dank für die Antwort. Kann mir vielleicht noch jemand sagen wie das mit SQL umgesetzt werden muss? :oops: Christian |
Re: SQL: UNION-Befehl (mySQL-Fehler?)
Hallo trialfreak,
falls mySQL CASTing unterstützt, könntest du folgendes schreiben:
SQL-Code:
ansonsten
SELECT CAST('Projekte' AS CHAR(30)) FROM...
SQL-Code:
Damit legst du die gewünschte Länge fest.
SELECT 'Projekte ' FROM...
|
Re: SQL: UNION-Befehl (mySQL-Fehler?)
Hallo,
habe ebend CAST probiert - funktioniert nicht - in der mySQL Dokumentation lässt sich ein solcher Befehl auch nicht finden. Das mit
SQL-Code:
habe ich auch schon herausgefunden.
SELECT 'Projekte ' FROM tabelle
Aber diese Lösung gefällt mir nicht da abhängig vom "aktiven" Datensatz und dem Inhalt des Info-Feldes Einstellungen an anderen Queries, DBCharts etc. gemacht werden. Denn dann muss ich ja auch auf die Leerzeichen mit überprüfen - gefällt mir nicht. Oder ich schreibe mir eine Funktion die die Leerzeichen am Ende eines Strings entfernt, dann kann ich mit ganz normalen Bezeichnern arbeiten... Also statt :
Delphi-Quellcode:
immer
dm.Q_statistik1.FieldValues['Info'];
Delphi-Quellcode:
EDIT:
deletespaces(dm.Q_statistik1.FieldValues['Info']);
Hat vielleicht noch jemand eine andere Idee oder eine weitere Erklärung bzw. Lösung für das Verhalten des mySQL Servers? Christian |
Re: SQL: UNION-Befehl (mySQL-Fehler?)
Hab ich ebend vergessen - die Funktion sieht dann so aus:
Delphi-Quellcode:
Einwände dagegen?
function Tf_statistik.deletelastspaces(stringwithendspaces : string) : string;
begin Result:=(TrimRight(stringwithendspaces)); end; Eine "richtige" Lösung des Problems wäre mir natürlich immer noch lieber... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz