Announcement

Collapse
No announcement yet.

Kniffliges SQL-statement...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Kniffliges SQL-statement...

    Hallo liebes Forum,

    ich habe folgendes Problem, an dem ich langsam verzweifle...

    gegeben sind zwei Tabellen:
    Tabelle Main mit folgenden Spalten
    id -> Primärschlüssel
    id_titel -> Fremdschlüssel von Titel.id

    Tabelle Titel mit folgenden Spalten
    id -> Primärschlüssel
    titel


    gesucht ist folgendes statement:
    in Tabelle Titel soll geprüft werden, ob ein eingehender String bereits in der Spalte titel existiert
    -> wenn ja, so soll die id dieses titels in der Tabelle Main unter id_titel eingetragen werden

    -> wenn nicht, so soll in Spalte titel (Tabelle Titel) ein neuer Eintrag vorgenommen werden und die id (von Tabelle Titel) des neues Eintrages in id_titel von Tabelle Main eingetragen werden.


    'e bissel Plan habe ich von SQL, doch dieses Statement macht mich alle... :-(

    für Ratschläge, Lösungsansätze, Lösungsvorschläge bin ich sehr dankbar

    beste Grüße
    Poleander

  • #2
    Hallo,

    welches DBMS kommt zum Einsatz ? Mit Oracle könnte man DECODE und CASE nennen.
    MfG
    Cheat-Sheets for Developers / Programming Quotes

    Comment


    • #3
      Hallo Markus,

      zum Einsatz kommt MS SQL Server (ich glaube 2003, könnte auch 2005 sein... könnte auch egal sein...)
      Zuletzt editiert von Poleander; 05.05.2009, 22:39.

      Comment


      • #4
        MS SQL Server (könnte auch 2005 sein)
        Es gibt MS SQL Server 2000, 2005 und 2008...
        Aber dafür wären eh die entsprechenden Unterforen zuständig: http://entwickler-forum.de/forumdisplay.php?f=28
        Immerhin unterstützt T-SQL die gesuchten Befehle: http://www.tsql.de/transact-sql/ausw...lanweisung.php
        MfG
        Cheat-Sheets for Developers / Programming Quotes

        Comment


        • #5
          das Problem besteht weiterhin... ich hab mich nochmal d'ran gesetzt, krieg' aber nur 'nen Knoten im Hirn... und auf'm Zettel... selbst 'ne Pulle Wein hat da nicht viel ausrichten können...

          Comment


          • #6
            Wäre ein typisches Problem für MERGE. Dieses existiert bei MSSQL aber erst ab MSSQL 2008. Bleibt dir keine andere Möglichkeit als dieses in einer SP nachzubilden.

            Comment


            • #7
              Wir kennen jetzt die Aufgabenstellung aber wo genau liegt das Problem? Und wie soll das ablaufen? Macht das der Client oder soll das über einen Trigger erfolgen? Erzähl mal was du schon alles bisher probiert hast (SQL-Statements und so...)

              bye,
              Helmut

              Comment


              • #8
                ablauf ist folgender:

                aus einer VB.NET App wird das gesuchte Statement an die DB gegeben.

                Mit folgendem Statement erhalte ich ja die ID eines titels, wenn er bereits in der Tabelle existiert:

                INSERT INTO tab_main
                (id_title)
                SELECT id
                FROM tab_titel
                WHERE (titel = '[Netzwerk]')

                Ich weiß nun nicht, wie ich das Statement ergänze, um vorher zu prüfen, ob der titel überhaupt in der Tabelle Titel existiert - und wenn nicht - ihn eintragen zu lassen und die neue id an die Tabelle Main zu geben.
                Ich kann ja nicht nach WHERE 'ne INSERT - SELECT - WHERE NOT EXISTS bauen... zumindest schlugen meine Versuche bisher fehl... wahrscheinlich aus mangelnder Kenntnis des SQL-Umfangs.

                Man könnte natürlich noch ein Statement vorausschicken, mit dem nach INSERT - SELECT - WHERE NOT EXISTS der übergebene String im Zweifelsfall eingetragen wird - und dann die ID abfragen. Vorrangig interessiert mich jedoch eine Lösung mit nur einem Statement. Das von mir angegebene Beispiel ist nur ein Auszug - im wirklichen Programm sind die Tabellen größer... es würde dann nicht bei "nur" zwei Statements bleiben.
                Zuletzt editiert von Poleander; 06.05.2009, 12:11.

                Comment


                • #9
                  Das wirst du so nicht hinkriegen, da unter Umständen ein INSERT in zwei verschiedenen Tabellen erforderlich ist. Und das geht mit einem einzigen Statement nicht. Also zuerst ein SELECT, um die id aus tab_title zu lesen, dann, falls nicht gefunden, ein INSERT des neuen Titels in tab_title, nochmals die id lesen, zum Schluß INSERT in tab_main. Da führt kein Weg dran vorbei.


                  bye,
                  Helmut

                  Comment


                  • #10
                    Hallo Helmut,

                    kurz vor Deiner Antwort habe ich es so bereits verwirklicht:

                    IF NOT EXISTS (SELECT FROM...) INSERT INTO tab_titel...
                    damit gehe ich sicher, daß es eine (einzige) ID zum titel gibt

                    danach...
                    INSERT INTO tab_main

                    Danke für Deine Bestätigung ;-)

                    Auch allen anderen Dank für ihre Beteiligung!

                    von mir aus... *closed*

                    Comment

                    Working...
                    X