Susanna: MYSQL : UPDATE und SELECT. über zwei Tabellen

Ich habe eine Tabelle in dieser stehen meine Begriffe

table1
-------------
id! name
1 ! Wien
2 ! Haus
3 ! Wein

in meiner zweiten stehen alle Texte

table2
-------------
id! ok ! text
---------------------------------------------
1 ! 0  ! Es war einmal in Wien
2 ! 0  ! Ein Haus ist ross
3 ! 0  ! Wein ist der Geist
4 ! 0  ! Hallo was ist los

Nun würde ich gerne alle Begriffe der ersten Tabelle in der zweiten suchen, und wenn einer vorhanden ist den Wert Ok auf 1 setzen.

UPDATE table2 SET ok=1 WHERE text LIKE '%wien%'

So klappt es wenn ich es einzeln selbst mache, nun würde ich gerne das ganze automatisieren.....

Susanna

  1. Moin,

    Nun würde ich gerne alle Begriffe der ersten Tabelle in der zweiten suchen, und wenn einer vorhanden ist den Wert Ok auf 1 setzen.

    Das ist eine komplexe Operation. Da es verschiedene SQL-Dialekte gibt, müssten wir wissen, welches DBMS du benutzt. Ich rate mal wild, dass du MySQL benutzt. In diesem Fall wäre _eine_ Lösung diese hier:

    UPDATE table2 SET ok=1 WHERE text REGEXP (SELECT GROUP_CONCAT(name SEPARATOR '|') FROM table1)  
    
    

    Es kann aber auch andere|bessere™ Lösungen geben.

    Grüße Marco

    --
    Ich spreche Spaghetticode - fließend.
    1. Danek für deine Antowrt,

      ja es handelt sich dabei um Mysql, abe rich habe es im Titel vermerkt, abe rim Text dann icht mehr sorry.

      Ich möchte keinen "SEPARATOR '|'" suchen sondern die Werte Wien... aus der ersten Tabelle in der zweiten, und wenn vorhanden dann ok=1

      Oder habe ich da was nicht kapiert, und es sthet schon da???

      Susanne

      Nun würde ich gerne alle Begriffe der ersten Tabelle in der zweiten suchen, und wenn einer vorhanden ist den Wert Ok auf 1 setzen.

      Das ist eine komplexe Operation. Da es verschiedene SQL-Dialekte gibt, müssten wir wissen, welches DBMS du benutzt. Ich rate mal wild, dass du MySQL benutzt. In diesem Fall wäre _eine_ Lösung diese hier:

      UPDATE table2 SET ok=1 WHERE text REGEXP (SELECT GROUP_CONCAT(name SEPARATOR '|') FROM table1)

      
      > Es kann aber auch andere|bessere™ Lösungen geben.  
      >   
      > Grüße Marco
      
      1. Moin,

        ja es handelt sich dabei um Mysql, abe rich habe es im Titel vermerkt, abe rim Text dann icht mehr sorry.

        Stimmt, hatte ich gar nicht gesehen ;)

        Ich möchte keinen "SEPARATOR '|'" suchen sondern die Werte Wien... aus der ersten Tabelle in der zweiten, und wenn vorhanden dann ok=1

        Diese Subquery ist nur dafür da, dass der reguläre Ausdruck zusammengebaut wird.

        Oder habe ich da was nicht kapiert, und es sthet schon da???

        Ja, das scheint so ;)

        UPDATE              -- Aktualisiere die ...  
           table2           -- ... tabelle2 ...  
           SET ok=1         -- ... indem du das Feld 'ok' auf 1 setzt ...  
        WHERE text REGEXP   -- ... wenn das Feld 'text' folgenden regulären Ausdruck matched:  
           (SELECT GROUP_CONCAT(name SEPARATOR '|') FROM table1)
        ~~~wenn du ~~~sql
        SELECT GROUP_CONCAT(name SEPARATOR '|') FROM table1  
        
        ~~~in den Editor eingibst, dann siehst du, dass er einfach alle Wörter aus der ersten Tabelle selektiert und |-getrennt ausgibt. Nach der Ausführung der Subquery sieht es also so aus:  
        ~~~sql
        UPDATE table2 SET ok=1 WHERE text REGEXP 'Wein|Haus|Wien'  
        
        ~~~das Zeichen | heißt in regulären Ausdrücken "oder".  
          
        Ich hoffe ich konnte das verständlich erklären.  
          
        Grüße Marco
        
        -- 
        Ich spreche Spaghetticode - fließend.