![]() |
Datenbank: MySQL • Zugriff über: UniDAC
SQL Vereinfachung einer Union Query wegen UniDac Problem
Hallo,
ich habe momentan ein Problem mit einer Union Query, die bei UNIDac einen Assertion Failure verursacht. Wie im SQL zu sehen, werden die selben Tabellen verwendet, lediglich die WHERE Klauseln unterscheiden, ob die Werte der Spalten Partial und Total dividiert werden oder nicht.
SQL-Code:
Wie gesagt, verursacht die Abfrage einen UniDac Fehler, im MySQL Query Browser funktioniert sie ohne Probleme.
(SELECT
T1.ID AS Name, T1.Partial DIV 3600 AS Partial, T1.Total DIV 3600 AS Total, T2.Unit AS Unit FROM Tabelle1 AS T1, Tabelle2 AS T2 WHERE T1.ID = T2.ID AND T2.Unit = 'hours') UNION (SELECT T1.ID AS Name, T1.Partial AS Partial, T1.Total AS Total, T2.Unit AS Unit FROM Tabelle1 AS T1, Tabelle2 AS T2 WHERE T1.ID = T2.ID AND T2.Unit = '') ORDER BY Name ASC LIMIT 10000 Meiner Meinung nach wird der Fehler durch das UNION ausgelöst, alle anderen Queries verursachen keine Fehler. Gibt es vielleicht eine andere Möglichkeit um eine Bedingung in eine Abfrage einzubauen? Grüße, Alphaflight |
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Hast du die Query mit Fehlerbeschreibung schon an den Komponentenhersteller gemeldet?
Ansonsten: Wieso gibt es im zweiten Teil keine Spalten-Alias "Name"? |
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Das fehlende Name war ein Copy Paste Fehler, das muss da natürlich rein.
Ich habs ins DevArt Forum gepostet, bisher aber noch keine Antwort erhalten, werd ich später/morgen nochmal sehen müssen. |
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Versuche mal explizite Joins
|
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Zitat:
|
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Zitat:
|
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Zitat:
|
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Unterschiedliche Alias-Reihenfolge? Ich verstehe nicht ...
|
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Lass mal das as beim Tabellen-Alias weg
|
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Grade getestet, aber das AS beim Tabellen-Alias hat keine Auswirkung.
Ich probiere grade mal die CASE/IF Sache aus ... |
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Hallo,
geht denn folgendes ?
SQL-Code:
(SELECT
T1.ID AS Name, T1.Partial DIV 3600 AS Partial, T1.Total DIV 3600 AS Total, T2.Unit AS Unit FROM Tabelle1 AS T1, Tabelle2 AS T2 WHERE T1.ID = T2.ID AND T2.Unit = 'hours') UNION (SELECT T3.ID AS Name, T3.Partial AS Partial, T3.Total AS Total, T4.Unit AS Unit FROM Tabelle1 AS T3, Tabelle2 AS T4 WHERE T3.ID = T4.ID AND T4.Unit = '') ORDER BY T3.ID ASC LIMIT 10000 Heiko |
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Just for Info:
UNION ALL arbeitet schneller als UNION, weil der Server doppelte Datensätze nicht aus dem Ergebnis entfernen muss. (bei deiner Abfrage sind doppelte Datensätze eh ausgeschlossen) Ausserdem, hast du Beitrag #4 beachtet?
SQL-Code:
Und lass mal die Limit-Klausel weg...
SELECT
T1.ID AS Name, T1.Partial DIV 3600 AS Partial, T1.Total DIV 3600 AS Total, T2.Unit AS Unit FROM Tabelle1 T1 INNER JOIN Tabelle2 T2 ON T1.ID = T2.ID WHERE T2.Unit = 'hours' UNION ALL SELECT T1.ID AS Name, T1.Partial AS Partial, T1.Total AS Total, T2.Unit AS Unit FROM Tabelle1 T1 INNER JOIN Tabelle2 T2 ON T1.ID = T2.ID WHERE T2.Unit = '' ORDER BY Name ASC |
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Warum so kompliziert?
SQL-Code:
SELECT t1.id AS name,
CASE WHEN t2.unit = 'hours' THEN t1.partial DIV 3600 ELSE t1.partial END AS partial, CASE WHEN t2.unit = 'hours' THEN t1.total DIV 3600 ELSE t1.total END AS total, t2.unit AS unit FROM tabelle1 t1 INNER JOIN tabelle2 t2 ON t1.id = t2.id ORDER BY name LIMIT 10000 |
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
tsteinmaurers bzw. Omatas Vorschlag funktioniert wunderbar.
Anscheinend hat UniDac wirklich Probleme mit UNION, da alle anderen Vorschläge den gleichen Fehler zur Folge hatten. Danke an alle, es ist einfach Spitze wie schnell man hier Hilfe bekommt. :dp: |
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Wobei das genau die Lösung war, welche Thomas unter #5 vorgeschlagen hat
|
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Jo, ich hatte mir das auch schon angeschaut,
Omata hat es hier aber mustergleich präsentiert, weswegen ich auf seinen Eintrag verwiesen habe. (Edit: vorherigen Post editiert) |
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Hallo Markus,
richtig, aber ich war zu faul ein lauffähiges Beispiel zu liefern. :-D |
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Es ist immer die Frage, wer der jenige seis sollte, der sich die Mühe macht, der Fragesteller oder der Helfende :zwinker:
|
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Ohne hier jetzt eine Diskussion starten zu wollen...
Es ist hier also nicht erwünscht konkrete Beispiele zu liefern, es sei denn man ist der der das Problem hat und die Frage formuliert hat? Es ist nicht erlaubt Befehle, Ideen oder sonst etwas aus vorherigen Posts zu entnehmen, diese zu erweitern oder zu konkretisieren? Schade, dass man diese Schlussfolgerungen aus dieser Diskussion ziehen muss, naja ich habe diese Anmerkungen zur Kenntnis genommen und werde (versuchen) mich in Zukunft dran zuhalten. Ihr schafft es immer wieder einem jegliche Illusionen zu nehmen, das ist echt schade... |
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Omata,
du hast meine vollständige Unterstützung, wenn du lauffähige Beispiele postest. In der Regel mach ich das auch, aber diesmal halt nur der Hinweis auf CASE, um den Originalposter auf die richige Fährte zu bringen. Also, nur weiter so und feel free, vollständige Lösungen zu posten. |
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Sorry, wenn ich hier missverstanden wurde. natürlich darfst du hier gerne hier fertige Lösungen posten.
Ich meinte nur, das hier niemnad verpflichtet dazu ist. Ich habe vielleicht noch etwas die Illusion, das Hilfe zu Selbsthilfe der bessere Weg ist, wurde aber schon weitesgehends davon kuriert. Meine Aussage ist auch meine private Meinung und kein offizielles Statement als Teammitglied. |
Re: SQL Vereinfachung einer Union Query wegen UniDac Problem
Um hierzu nochmal was zu sagen,
ich hatte nach tsteinmaurers Beitrag die CASE Anweisung schon lauffähig, allerdings nur ohne Alias, da ich nicht wusste, wo der beim CASE platziert werden muss. Da ich auf den Alias angewiesen bin und Omatas Beitrag mir noch die Lösung hierzu geliefert hat, habe ich anfänglich nur auf diesen verwiesen, da für evtl. zukünftige Suchende das eben die fertige Lösung darstellt. Für mich gilt, dass ich aus diesem Thread einiges lernen konnte, eben auch aus den Beiträgen, die jetzt nicht direkt zur Lösung beigetragen haben (Stichwort: schnelleres Query durch UNION ALL) was doch auch der Sinn des Ganzen sein sollte. Kurzum: Als Suchender ist man für jede Hilfe dankbar, ein Beispiel kann aber noch dazu Zeit sparen und gerade bei zickigen SQL-Abfragen, ist manchmal ein gut formuliertes Beispiel die beste Hilfe zur Selbsthilfe. Gruß, Alphaflight |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 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-2025 by Thomas Breitkreuz