[MSSQL] JOIN Problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MSSQL] JOIN Problem

    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
    Find Parties?
    Partysuche

  • #2
    Mir ist das jetzt zu spät/früh um alles zu lesen, aber es klingt spontan danach, dass du LEFT JOIN suchst?

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Ja das glaube ich auch, schau dir hier die Beispiele an (Manual).
      Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

      Kommentar


      • #4
        Guten Tag

        Vielen Dank! In meinem PHP Buch wurden die JOINS nur kurz angekratzt, aber was der Unterschied ist, wusste ich nicht!
        Dankeschön!

        gruß Flip
        Find Parties?
        Partysuche

        Kommentar

        Lädt...
        X