kny: Spezielle Abfrage mit Postgres

Hallo,

ich versuche gerade mit Postgres eine für mich schwierige Abfrage hinzubekommen.

  
  
UPDATE domain  
  
SET cust_id = (SELECT cust_id  
                  FROM customer c  
                    WHERE c.cust_name = e.kunde_neu)  
  
FROM domain d, export e  
  
WHERE  
  d.d_id = e.d_id;  

Diese Abfrage umfasst 3 Tabellen, einmal die Tabelle domain in der bestimmte Einträge verändert werden sollen. Und zwar nur diese die Where Bedingung unten erfüllen. Daraufhin sollen mit SET diese verändert werden. Mein Problem ist nun das ich die Setbedingung ( Select from Where ) nun unzureichend definieren kann. Leider gibt die Setbedingung eine Tabelle wieder. Aber ich brauche dafür nur den einen Wert. und zwar den Wert für die entsprechende d_id. Also möchte ich das ich oben in der Abfrage immer die d_id einbinde welche auch gerade ( in einer Schleife oder wie auch immer ) abgearbeitet wird. War das irgendwie verständlich? Ich hoffe jemand kann sich darauf einen Reim machen. Wenn nicht fragt bitte nach.

  1. moin,

    ich versuche gerade mit Postgres eine für mich schwierige Abfrage hinzubekommen.

    ist eher eine dml anweisung und keine abfrage, aber das nur zur anmerkung. in der FROM klausel verwendest du die implizite schreibweise, besser lesbar ist die explizite, aber auch das nur zur anmerkung. ausserdem solltest du der update tabelle auch einen aliasnamen vergeben.

    Also möchte ich das ich oben in der Abfrage immer die d_id einbinde welche auch gerade ( in einer Schleife oder wie auch immer ) abgearbeitet wird. War das irgendwie verständlich? Ich hoffe jemand kann sich darauf einen Reim machen. Wenn nicht fragt bitte nach.

    kannst du uns mal im groben den aufbau der beteiligten tabellen und beispieldaten geben (vorher / nacher) ?

    Ilja

    1. Ja gerne, danke schonmal für die Hinweise.

      Die 3 Beteiligten Tabellen sind folgende.Ich habe mal nur die wichtigen Spalten kopiert.

        
      CREATE TABLE export  
      (  
        d_id integer,  
        cust_id integer,  
        cust_name character varying(255),  
        kunde_neu character varying(255)  
      )  
        
        
        
      CREATE TABLE customer  
      (  
        cust_id integer NOT NULL DEFAULT nextval(('customer_cust_id_seq '::text)::regclass),  
        cust_name character varying(255) NOT NULL,  
       ...  
        
        
      CREATE TABLE "domain"  
      (  
        d_id integer NOT NULL,  
        cust_id integer,  
       ...  
        
      
      

      ich versuche nochmal zu beschreiben was ich bezwecke ^^

      Ich der tabelle export liegen alle meine "richtigen" Datensätze. Als Ziel möchte ich alle Datensätze die in Export liegen mit in der Tabelle domain ( speziell nur die cust_id ) korrigieren. dabei geht es nur um die cust_id welche in domain noch falsch sind. Mein Abfrage ist schon in der Lage diese durch d_id welche in domain und in export vorhanden sind zu identifizieren.

      Jetzt habe ich in Export den richtigen Namen des Custumers welche ich dann gerne aus der Tabelle customer auslesen  möchte und für jeden datensatz korrigiert updaten möchte.

      ich hoffe das macht es etwas verständlicher

      1. moin,

        ich hoffe das macht es etwas verständlicher

        vielleicht habe ich es noch falsch verstanden, aber wenn ich das puzzle zusammen setze, dann willst du in der tabelle domain die falsche cust_id korregieren. und in der export tabelle steht den schon die richtige cust_id ?

        dann wäre es ja einfach, einfach die cust_id nehmen, die in der tabelle export steht nehmen. aber vermutlich wird es nicht das sein, deshalb noch mal mein aufruf für beispieldaten.

        Ilja