Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

SQL Update Select

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von heinz7263, 8 März 2016.

  1. heinz7263

    heinz7263 Neuer Benutzer

    Hallo, ich möchte einen Update-Befehl erstellen, der eine StatusID setzt, also in etwa so: UPDATE table1 SET STATUSID = 4 WHERE

    Hinter das Where würde ich nun gerne ein Select-Befehl setzen. Über diesen Select Befehl erhalte ich alle Datensätze, bei denen die StatusID auf 4 gesetzt werden soll. Wie kombiniere ich das?

    select f.formtype,f.formuser,f.formstatusid
    from table2 v, table1 f
    where v.statusid ="1"
    and v.date like"2010-06-17 15:40%"
    and f.formtype ="4"
    and f.formid = v.formid
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Was ist denn Dein Ansatz?

    Mal so als Idee...

    Code:
    test=# create table foo (id int primary key, status int default 0);
    CREATE TABLE   
    test=*# insert into foo select * from generate_Series(1,10) s;
    INSERT 0 10   
    test=*# create table bar(id int references foo, val numeric default random());
    CREATE TABLE   
    test=*# insert into bar (id) select * from generate_series(1,10) s;
    INSERT 0 10   
    test=*# select * from foo;   
     id | status   
    ----+--------
      1 |  0
      2 |  0
      3 |  0
      4 |  0
      5 |  0
      6 |  0
      7 |  0
      8 |  0
      9 |  0
     10 |  0
    (10 rows)
    
    test=*# select * from bar;
     id |  val
    ----+--------------------
      1 |  0.250136776827276
      2 |  0.96370570641011
      3 |  0.82207860937342
      4 |  0.978553278837353
      5 |  0.845835954416543
      6 |  0.332892938051373
      7 |  0.146631310228258
      8 |  0.154744449071586
      9 |  0.115069905761629
     10 | 0.0964399455115199
    (10 rows)
    
    test=*# update foo set status = 1 where id in (select id from bar where val > 0.5);
    UPDATE 4
    test=*# select * from foo;
     id | status
    ----+--------
      1 |  0
      6 |  0
      7 |  0
      8 |  0
      9 |  0
     10 |  0
      2 |  1
      3 |  1
      4 |  1
      5 |  1
    (10 rows)
    
    Hilft das?
     
  3. ukulele

    ukulele Datenbank-Guru

    Unter MSSQL könnte man das in etwa so machen:
    Code:
    UPDATE   table1
    SET     table1.formtype = v.formtype,
         table1.formuser = v.formuser,
         table1.formstatusid = v.formstatusid
    FROM   table1
    INNER JOIN table2 v
    ON     table1.formid = v.formid
    WHERE   v.statusid ="1"
    AND     v.date LIKE "2010-06-17 15:40%"
    AND     table1.formtype ="4"
    AND     table1.formid = v.formid
    Aber ich glaube das kann MySQL nicht.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden