Announcement

Collapse
No announcement yet.

Bei SELECT: Falls Wert=x, dann ersetze durch y -> möglich?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bei SELECT: Falls Wert=x, dann ersetze durch y -> möglich?

    Hallo,

    Ich habe 2 Tabellen, die miteinander verknüpft sind. Ungefähr so:

    Tabelle1: Id_T1, Wert1_T1, Wert2_T1, ...
    Tabelle2: Id_T2, Wert1_T2, Id_T1

    Die Tabellen sind also über die ID der Tabelle 1 miteinander verknüpft. Leider exisiteren Datensätze in Tabelle 1, die in Tabelle 2 nicht vorkommen. Besteht die Möglichkeit nur mit einer SELECT-Abfrage alle Datensätze aus Tabelle 1 mit Tabelle 2 zu verknüpfen und bei den Datensätzen aus Tabelle 1, die nicht in Tabelle 2 vorkommen einen Standwert (z.B. "nicht verfügbar") für die Spalte Wert1_T2 zu setzen?

    Pseudocode: Falls Wert1_T2 zu einem verknüpften Datensatz nicht existiert, dann ersetze ihn durch x

    Ich hoffe meine Anfrage ist verständlich.

    Beste Grüße,
    Denis

  • #2
    update Tabelle1 set Wert1_T2= "x"
    where not exists(select * from Tabelle2 where Tabelle2.Id_t1=
    Tabelle1.Id_t1)

    (So ginge es in Informix)

    Gruß frauwue
    docendo discimus

    Comment


    • #3
      Danke für die schnelle Antwort... aber es sollte in einem SELECT-Statement funktionieren. Ich kann die Daten nur auslesen, nicht verändern.

      Bin übrigens schon ein bißchen weiter. Hier mein SQL-Befehl:

      SELECT tabelle1.*, REPLACE(tabelle2.Wert1_T2,NULL,'n.a.') AS Gruppe FROM `tabelle1`
      LEFT JOIN tabelle2
      ON tabelle1.id = tabelle2.Id_T1

      Dabei werden aber alle Werte in der Spalte Gruppe gleich NULL gesetzt und nicht die, die NULL sind durch 'n.a.' ersetzt.

      Weiß jemand rat?

      Comment


      • #4
        Dann probiers doch mal mit union select
        Schreibe statt Left JOIN
        im ersten Select
        "where not exists(...)" wie in meinen obigen Statement
        und statt dem REPLACE (.. ) "n.a ."

        im verknüpften select schreibe
        "where exists(...)" und selektiere tabelle2.Wert1_T2 direkt


        Gruß frauwue
        Zuletzt editiert von frauwue; 04.10.2007, 14:28.
        docendo discimus

        Comment


        • #5
          Einen Wert durch anderen ersetzen geht so:

          SELECT ...,
          CASE when Wert1_T2 IS NULL THEN 'X' ELSE Wert1_T2 END as Wert1_T2,...
          FROM ...

          funktioniert zumindest so in SQL und in ORACLE

          Comment


          • #6
            Danke für die Hilfen. Ich verwende jetzt folgendes:

            SELECT tabelle1.*, COALESCE(gruppen.gruppe,'ohne Gruppe') AS Gruppe FROM `tabelle1`
            LEFT JOIN tabelle2
            ON tabelle1.id = tabelle2.Id_T1

            Achja, ich arbeite übrigens mit ner MySQL-DB. Weiß nicht ob's den Befehl auch bei anderen DBs gibt?!

            Comment


            • #7
              Originally posted by MonsterX View Post
              ...Achja, ich arbeite übrigens mit ner MySQL-DB. Weiß nicht ob's den Befehl auch bei anderen DBs gibt?!
              Deshalb ist es IMMER sinnvoll, bei seiner Frage die verwendete DB VORHER mit anzugeben, bzw. seine Frage gleich ins richtige Forum zu schreiben!

              Gruß und Danke für die Beachtung
              Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment

              Working...
              X