Tabellenspalten verschmelzen

Diskutiere mit über: Tabellenspalten verschmelzen im Datenbanksysteme für das Web Forum

  1. Jakob

    Jakob Thread Starter MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    Registriert seit:
    05.01.2004
    Hallo!

    Ich habe eine Tabelle mit zwei Spalten, die linke voll besetzt, in der rechten nur manche.
    Für manche Ausgaben möchte ich, wenn es einen Wert in Spalte 2 gibt diesen anstatt den Wert der Spalte 1 ausgeben.

    Dies:
    Code:
    Spalte 1  |  Spalte 2
        a     |    NULL
        b     |     2
        c     |    NULL
        d     |     3
    
    Soll also für die Abfrage zu
    Code:
    Spalte 1  |  Spalte 2
        a     |    NULL
        2     |     2
        c     |    NULL
        3     |     3
    
    werden.

    Die Tabelle sollte nicht dauerhaft verändert werden, es gilt nur für manche Aufrufe. Kann ich das auf MySQL-Ebene hinbekommen? Würde es ungern in einer PHP-for-Schleife lösen.
     
  2. timoken

    timoken MacUser Mitglied

    Beiträge:
    826
    Zustimmungen:
    8
    Registriert seit:
    11.11.2003
    ?! wenn ein wert null ist, dann ist er null. mysql ist eine datenbank und keine programmierumgebung mit der man "wenn dann"-bedingungen definieren kann (soweit ich weiß)
     
  3. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.029
    Zustimmungen:
    1.314
    Registriert seit:
    13.09.2004
    Das geht nur mit ner temporären Tabelle ( ich glaub das mysql beizeiten auch!?)

    Erstell einfach eine temporäre Tabelle, mach einen SELECT aus Spalte 1 da hinein und dann einen UPDATE auf diese Tabelle aus Spalte2 wo Spalte1 NULL ist. Resultat ist eine von Spalte2 überlagerte Spalte1. Die kannst Du dann auslesen und die temporäre Tabelle verwerfen!
     
    Zuletzt bearbeitet: 10.05.2006
  4. master_p

    master_p MacUser Mitglied

    Beiträge:
    1.065
    Zustimmungen:
    23
    Registriert seit:
    31.01.2005
    Temporäre Tabelle? Keine IF-Anweisung in MySQL? Sag mal denke ich hier falsch oder kennt ihr die performantesten MySQL-Befehle nicht?

    Ich würde es so lösen:
    Code:
    SELECT IF(Spalte2.feld IS NOT NULL, Spalte2.feld, Spalte1.feld) FROM blabla LEFT JOIN blabla WHERE blabla ORDER BY blabla
    
    Die IF-Anweisung in MySQL geht halt IF(Bedingung, Rückgabe-bei-Erfüllung, else-Zweig). Man kann auch Texte zurückgeben (z.B. für Checkboxen)

    IF (checkboxfeld=0, '', 'checked="checked")
     
  5. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.029
    Zustimmungen:
    1.314
    Registriert seit:
    13.09.2004
    Sorry, wegus==> Microsoft SQL-Server !
    Außerdem bin ich bemüht mit Standard-SQL auszukommen, eben falls ich mal nen mysql oder postgres irgendwo brauche!
     
  6. Hans Wurst

    Hans Wurst MacUser Mitglied

    Beiträge:
    197
    Zustimmungen:
    0
    Registriert seit:
    25.05.2005
    du könntest das mit einem self join in sql verwirklichen. wie die sql-syntax genau lautet, weiß ich nicht aus dem stehgreif. habe aber mal ein ähnliches problem auf diese weise gelöst.
     
  7. Jakob

    Jakob Thread Starter MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    Registriert seit:
    05.01.2004
    Hallo,

    nach längerem Überlegen habe ich die Struktur jetzt nochmals geändert, diesen speziellen Join brauche ich da jetzt erstmal nicht mehr. Vielen Dank für die vielen Tipps!

    Nach 500-seitiger Lektüre meine ich mit UNION das am geschicktesten hinzubekommen.

    Bzgl. der IFs:
    Es gibt in SQL eine CASE-Funktion, die sowas macht:
    Code:
    CASE expr
    WHEN value1 THEN result1
      [when value2 THEN result2]… [ELSE resultn]
    END
    
    Die soll aber auch je nach Hersteller leicht anders benannt sein, zumindest soll es sie aber überall geben.
     

Diese Seite empfehlen

Benutzerdefinierte Suche