URL: https://www.overclockers.at/coding-stuff/mysql_problem_mit_union_150679/page_1 - zur Vollversion wechseln!
Hey,
Meine Query liest aus der gleichen Datenbank-Tabelle unter zwei verschiedenen Bedingungen Daten aus.
Dazu verwende ich ein UNION Statement:
SELECT tabelle1.id, [...]
FROM tabelle1, [...]
WHERE [bedingung1]
UNION
SELECT tabelle1.id, [...]
FROM tabelle1, [...]
WHERE [bedingung2]
ORDER BY [...]
Nun habe ich aber das Problem, dass es sein kann, dass ein und der selbe Datensatz (gleiche tabelle1.id) zweimal im Result steht.
Ich suche einen Weg das zu verhindern.
Eigentlich müsste es ja funktionieren ein "GROUP BY tabelle1.id" an's Ende der Query anzuhängen, aber leider scheint das dann nur das zweite SELECT-Statement zu betreffen und nicht das Ergebnis der UNION.
PS: "UNION DISTINCT" kann ich nicht verwenden, weil bei den doppelten Datensätzen nicht alle Spalten exakt gleich sind.
Any hints?
*tia*
Zitat von MaehmannPS: "UNION DISTINCT" kann ich nicht verwenden, weil bei den doppelten Datensätzen nicht alle Spalten exakt gleich sind.
Phew. Wie erklär ich das am besten.
Die beiden Queries liefern die selbe Anzahl an Spalten, joinen aber eine unterschiedliche anzahl von tabellen und werden noch dazu dynamisch aufgebaut, weil sich die WHERE Definitionen ändern können.ZitatIch verstehe irgendwie nicht, warum du das mit einem UNION machst, wenn das eh aus der selben Tabelle kommt. Du könntest ja auch
Hm gefinkelt
Wenn deine MySQL Version Subqueries unterstützt, könntest du ja so was im 2. Teil der Vereinigung einbauen, á la
...oder so ähnlichCode:... UNION SELECT ... FROM table2 WHERE ... AND user_id NOT IN (SELECT user_id FROM table1 WHERE ...);
hm ... der denkanstoß ist schon mal nicht schlecht!
danke
muss mich noch ein bissl damit spielen *g*
wie wärs mit nem group by übers union?
Hmm, ganz sicher bin ich mir damit nicht, aber du könntest doch nur die tabelle.id mit dem von dir verwendeten Statement als Subselect verwenden. Dort würde dann das DISTINCT auch greifen...
Code:SELECT tabelle.id, [...] FROM tabelle WHERE tabelle.id IN (SELECT DISTINCT tabelle1.id FROM tabelle1, [...] WHERE [bedingung1] UNION SELECT tabelle1.id FROM tabelle1, [...] WHERE [bedingung2] ORDER BY [...])
Hab im mom nicht viel Zeit. Wenn sich das geändert hat, werd ich mich nochmal intensiv mit dem query beschäftigen ... vielleicht find ich noch was anderes als dem union ...
danke auf alle fälle für die antworten
just for info: mySQL macht grundsätzlich _immer_ ein union distinct, auch wenn kein distinct dortsteht. du kannst das keyword distinct zwar anfügen (wegen t-sql kompatibilität), es macht aber keinen unterschied.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025