COUNT()



  • Hallo,

    ich habe mal ne Frage zum COUNT().

    Und zwar habe ich eien SELECT Anweisung in einer Stored Procedure.
    Mit dieser Select Anweisung hole ich mir verschiedene Einträge aus mehrern Tabellen über LEFT OUTER JOINS.
    Jetzt möchte ich die "gesammelten Einträge der neuen Tabellen" zählen, und weiss nicht wie.
    Wenn ich den COUNT() in die Select Anweisung mach, bekommen ich ja alle Einträge aus der ersten Tabelle, nicht aus der neuen....

    Hat jemand einen Rat für mich?



  • Welches DBMS? Wenn Subselects unterstützt werden, gehts am einfachsten so:

    select count(*) from
    (select dies und das join und so from etc)
    


  • Oder Du verwendest ClientCode um zu schauen wieviele Datensätze zurückgeliefert wurden.
    DIes kann jedes RDBMS.



  • Und wie bekomme ich die Einträge in eine Tabelle?
    Wenn es 5 Einträge sind, will ich ja genau diese in eine Tabelle schreiben.
    Gibt es da eine Art Schleife oder so?



  • Formulier die Frage nochmal um, ich bin verwirrt 😕



  • OK.

    Also ich habe eine Stored Procedure.
    In dieser habe ich eine SELECT Anweisung.
    Mit dieser Select Anweisung hole ich mir Infos aus mehrern Tabellen.
    (Alles über Joins, so ca. 5 verschiedene Tabellen).

    SELECT
    bla
    , bla

    FROM tabelle

    LEFT OUTER JOIN tabell_1
    ON tabelle_1.id = tabelle_id

    usw..

    WHERE....

    GROUP BY....

    ORDER BY
    tabelle_id

    so z.B.

    Jetzt möchte ich die Ergebnisse der SELECT Anweisung in eine neue Tabelle schreiben.
    Also wenn mir die SELECT Anweisung z.B. 10 Ergebnisse liefert, will ich diese 10 Datensätze in eine Tabelle schreiben, aber wie?

    War das verständlich?



  • Versuch' mal

    INSERT INTO newtable (col1,col2,...) SELECT * FROM mytrigger;
    

    oder wenn die Ergebnistabelle noch nicht existiert:

    CREATE TABLE newtable AS SELECT * FROM mytrigger;
    


  • Was meisnt Du mit:

    SELECT * FROM mytrigger;



  • simcon schrieb:

    Was meisnt Du mit:

    SELECT * FROM mytrigger;

    Damit meinte er deinen SQL-QUERY

    SELECT
    bla
    , bla
    
    FROM tabelle
    
    LEFT OUTER JOIN tabell_1
    ON tabelle_1.id = tabelle_id
    
    usw..
    
    WHERE....
    
    GROUP BY....
    
    ORDER BY
    tabelle_id
    


  • Kann mir jemand den ganzen SQL Code zusammenstellen?
    Ich steh geade voll auf dem Schlauch



  • Dann nehme ich also den Code

    INSERT INTO newtable (col1,col2,...) SELECT * FROM mytrigger;
    

    Dann frage ich "was ist mit SELECT * FROM mytrigger gemeint", was mit "mein SQL-Query" beantwortet wird.

    Nun ersetze ich "SELECT * FROM mytrigger" durch

    SELECT
    bla
    , bla
    
    FROM tabelle
    
    LEFT OUTER JOIN tabell_1
    ON tabelle_1.id = tabelle_id
    
    usw..
    
    WHERE....
    
    GROUP BY....
    
    ORDER BY
    tabelle_id
    

    und erhalte

    INSERT INTO newtable (col1,col2,...) 
    SELECT
    bla
    , bla
    
    FROM tabelle
    
    LEFT OUTER JOIN tabell_1
    ON tabelle_1.id = tabelle_id
    
    usw..
    
    WHERE....
    
    GROUP BY....
    
    ORDER BY
    tabelle_id
    

    ...war nun nicht so schwer, oder? 🙂



  • Die erste Spalte beim Insert ist die ID der Tabeele.
    Diese sollte ja automatisch erhöht werden. Wie mach ich das, ohne ein autoimkrement anzugegeben?



  • Wenn die Primärschlüssel automatisch durch ein Autoincrement erhöht werden, dann lass diese Spalte doch einfach aus. In der Insert-Projektion (col1, col2, ...) eben die Primspalte nicht mit angeben und in der Select-Projektion SELECT col1, col2 eben auch nicht.


Anmelden zum Antworten