Guten Tag,
Also in den Titel konnte ich leider nicht mehr reinpacken, weil er zu klein ist!
Mein Problem lautet wie folgt:
Ich habe eine Tabelle mit Kontobewegungen, die bei Abfragen mit einer Kundentabelle verknüpft wird durch eine JOIN-Anweisung.
Wenn allerdings ein Kunde gelöscht wird, würde die Kontobewegung ins Dunkle geraten.
Meine Notlösung sind vier SELECT Anweisungen mit UNION verbunden; einmal eben mit JOIN und einmal ohne.
Damit die Feldanzahl der SELECT Werte gleich bleibt fülle ich alles dann mit "NULL" auf, aber ich würde des gerne anders machen, weil ich nun eine größere Abfrage hab und nicht 1000 UNION Befehle nehmen kann. Noch dazu gibt es verschiedene Zustände der Datensätze und die will ich getrennt mit SELECT Abfragen.
also quasi like that:
[COLOR=green]
(
SELECT 1 as isDollar, U.user_name1, U.user_name2, K.konto_name, fm_transaktion.* FROM fm_transaktion INNER JOIN fm_user as U ON(U.user_id = fm_transaktion.transaktion_uid) INNER JOIN fm_konto as K ON (K.konto_id = fm_transaktion.transaktion_konto) WHERE transaktion_type = 2 $condition
UNION
SELECT 0 as isDollar, U.user_name1, U.user_name2, NULL, fm_transaktion.* FROM fm_transaktion INNER JOIN fm_user as U ON(U.user_id = fm_transaktion.transaktion_uid) WHERE transaktion_type <> 2 AND transaktion_state = 0 $condition2
UNION
SELECT 0 as isDollar, U.user_name1, U.user_name2, NULL, fm_transaktion.* FROM fm_transaktion INNER JOIN fm_user as U ON(U.user_id = fm_transaktion.transaktion_uid) WHERE transaktion_konto IS NULL AND transaktion_type <> 2 AND transaktion_state = 1 $condition2
UNION
SELECT 0 as isDollar, U.user_name1, U.user_name2, K.konto_name, fm_transaktion.* FROM fm_transaktion INNER JOIN fm_user as U ON(U.user_id = fm_transaktion.transaktion_uid) INNER JOIN fm_konto as K ON (K.konto_id = fm_transaktion.transaktion_konto) WHERE transaktion_type <> 2 AND transaktion_state = 1 $condition2
) ORDER BY isDollar ASC, fm_transaktion.transaktion_fdatum ASC, fm_transaktion.transaktion_order ASC[/COLOR]
$condition und $condition2 sind von PHP Skalare, hier egal!
Also ich benutze schon UNION, weil ich alles nach transaktion_type ordnen will, aber blöderweise nicht chronologisch!
Hätte eben gerne eine Abfrage mit einem UNION!
Und die Fehlgeschlagenen JOINS sollen mit NULL aufgefüllt werden!
Gibt's irgendwas wie:
[COLOR=green]
FORCE JOIN <tabelle> ON (<wenn der wahrheitswert falsch ist, fülle ich den rest mit NULL> )[/COLOR]
Vielen Dank
Also in den Titel konnte ich leider nicht mehr reinpacken, weil er zu klein ist!
Mein Problem lautet wie folgt:
Ich habe eine Tabelle mit Kontobewegungen, die bei Abfragen mit einer Kundentabelle verknüpft wird durch eine JOIN-Anweisung.
Wenn allerdings ein Kunde gelöscht wird, würde die Kontobewegung ins Dunkle geraten.
Meine Notlösung sind vier SELECT Anweisungen mit UNION verbunden; einmal eben mit JOIN und einmal ohne.
Damit die Feldanzahl der SELECT Werte gleich bleibt fülle ich alles dann mit "NULL" auf, aber ich würde des gerne anders machen, weil ich nun eine größere Abfrage hab und nicht 1000 UNION Befehle nehmen kann. Noch dazu gibt es verschiedene Zustände der Datensätze und die will ich getrennt mit SELECT Abfragen.
also quasi like that:
[COLOR=green]
(
SELECT 1 as isDollar, U.user_name1, U.user_name2, K.konto_name, fm_transaktion.* FROM fm_transaktion INNER JOIN fm_user as U ON(U.user_id = fm_transaktion.transaktion_uid) INNER JOIN fm_konto as K ON (K.konto_id = fm_transaktion.transaktion_konto) WHERE transaktion_type = 2 $condition
UNION
SELECT 0 as isDollar, U.user_name1, U.user_name2, NULL, fm_transaktion.* FROM fm_transaktion INNER JOIN fm_user as U ON(U.user_id = fm_transaktion.transaktion_uid) WHERE transaktion_type <> 2 AND transaktion_state = 0 $condition2
UNION
SELECT 0 as isDollar, U.user_name1, U.user_name2, NULL, fm_transaktion.* FROM fm_transaktion INNER JOIN fm_user as U ON(U.user_id = fm_transaktion.transaktion_uid) WHERE transaktion_konto IS NULL AND transaktion_type <> 2 AND transaktion_state = 1 $condition2
UNION
SELECT 0 as isDollar, U.user_name1, U.user_name2, K.konto_name, fm_transaktion.* FROM fm_transaktion INNER JOIN fm_user as U ON(U.user_id = fm_transaktion.transaktion_uid) INNER JOIN fm_konto as K ON (K.konto_id = fm_transaktion.transaktion_konto) WHERE transaktion_type <> 2 AND transaktion_state = 1 $condition2
) ORDER BY isDollar ASC, fm_transaktion.transaktion_fdatum ASC, fm_transaktion.transaktion_order ASC[/COLOR]
$condition und $condition2 sind von PHP Skalare, hier egal!
Also ich benutze schon UNION, weil ich alles nach transaktion_type ordnen will, aber blöderweise nicht chronologisch!
Hätte eben gerne eine Abfrage mit einem UNION!
Und die Fehlgeschlagenen JOINS sollen mit NULL aufgefüllt werden!
Gibt's irgendwas wie:
[COLOR=green]
FORCE JOIN <tabelle> ON (<wenn der wahrheitswert falsch ist, fülle ich den rest mit NULL> )[/COLOR]
Vielen Dank
Kommentar