Uwe Ibrath: Subselect + Insert bei MySql

Hi,

ich habe eine Frage zu etwas, was mir einfach nicht gelingen will:

Tab1)
abcde
xyz
yz
vw
....

Tab2)
abc
yz
vw

Tab3)
Treffer|Anzahl

Ich möchte in Tab3) alle Treffer aus Tab1) bzgl. Tab2) speichern,
d.h.:

abc|1
yz|2
vw|1

es müßte rein sprachlich etwa so laufen:

insert into "Tab3)" select "data" from "Tab2)" as "treffer1" and select "data",count("data") from "Tab1)" as "treffer2","count" where "treffer2" like concat ('','%',treffer1,'%');

...ich weiß, das ist Blödsinn, aber wie geht es wirklich?

Danke!

  1. Hallo Uwe,

    das SQL-Statement müßte folgendermaßen lauten:

    insert into Tab3 select concat(concat(data,'|'),count(data))  as treffer from Tab1 where data in (select data from Tab2) group by data

    Gruß

    Ralf

    1. Hallo Ralf,

      das SQL-Statement müßte folgendermaßen lauten:

      insert into Tab3 select concat(concat(data,'|'),count(data))  as treffer from Tab1 where data in (select data from Tab2) group by data

      danke, verstehe ich aber nicht.

      1. insert into Tab3
        ist klar
      2. select concat....
        was selektierst Du??? und hat concat nicht einen einen anderen Aufbau, nämlich Verbindung und dann eine Liste an Zeichen?
        z.B. concat('-','a','b') müßte 'a-b' liefern, oder?
        3)was machst Du mit "treffer"?

      kannst Du es mal erläutern?
      Danke!

      1. Hallo Uwe

        in
         insert into Tab3 select concat(concat(data,'|'),count(data))  as treffer from Tab1 where data in (select data from Tab2) group by data

        bedeutet

        1. insert ... : ist, wie Du sagst klar
        2. das select in Klammern selektiert alle Werte aus Tab2
        3. das äußere Select selektiert sowohl die data-Werte als auch ihre Häufigkeit in Tab1, wobei nur die Werte gesucht werden, die in Tab2 vorkommen (siehe 2) )
        4. Über concat werden Strings aneinandergekettet, daher ergibt concat(concat(...)) den String, den du wolltest, d.h. z.B. xyz|2, wenn xyz in Tab1 zweimal vorkam
        5. der Wert aus 4) (der komplette String) wird unter dem Feldnamen "treffer" selektiert, dementsprechend muß der Feldname in Tab3 sein

        Ich hoffe, das hat Dir geholfen,

        Gruß

        Ralf