Announcement

Collapse
No announcement yet.

Übersetzungshilfe MySQL->MsSQL "create table select"

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

  • Übersetzungshilfe MySQL->MsSQL "create table select"

    Hallo liebes Forum,

    ich bin Umsteiger von MySQL->MsSQL(TSQL). Deshalb entschuldigt meine Frage:

    Bisher war ich folgendes aus MySQL gewohnt
    Code:
    CREATE TABLE  tbl_name select_statement
    select_statement kann beliebig kompliziert sein (joins,order by usw.)

    Bei MsSQL(TSQL) gibt es nur
    Code:
    select * into  tbl_name from old_table
    Leider darf aber old_table kein (Sub)Select Statement bei MsSQL(TSQL) sein

    Gibt es hier eine vergleichbare Möglichkeit wie in MySQL in einem SQL Statement eine neue Tabelle aus einer select Abfrage zu erzeugen?

    Gruß und vielen Dank im voraus für eure Hilfe
    Christian

  • #2
    geht es evtl. wenn du einen View dazwischen schaltest der den (Sub)-Select beinhaltet.

    Comment


    • #3
      Hallo Bernhard,

      vielen Dank für Deinen hilfreichen Vorschlag, der auch so funktioniert. Wenn ich aber keine Views erstellen darf oder will, habe ich dann keine Möglichkeit?
      Das scheint mir bei MySQL doch einfacher. Aber wahrscheinlich liegt es nur daran, dass ich zu wenig Ahnung von TSQL habe und noch nicht die richtige Lösung gefunden habe.

      Gruß
      Christian

      Comment


      • #4
        Hi,

        vlt. geht es ja so:
        INSERT INTO tbl_name (afeld1, afeld2, afeld3)
        SELECT bfeld1, bfeld2, bfeld3 FROM old_tbl

        Habe es eben mal ausprobiert. Funktioniert wunderbar. Im Selectstatement kannst du dann auch die üblichen WHERE-Einschränkungen machen.

        Gruß

        Comment


        • #5
          Hallo Timo,

          auch Dir vielen Dank für Deinen Hinweis. "Insert into select" ist ok und funktioniert auch (wie bei MySQL) ist aber nicht vergleichbar mit MySQL "create table select", weil man die Tabelle erst anlegen muss. Bei MySQL wird sie automatisch mit den korrekten Datentypen erzeugt und gefüllt.
          Aber jetzt will ich mal nicht weiter meckern, sonst werde ich noch aus dem Forum verbannt :-)

          Nochmals vielen Dank an Timo und Bernhard. Vielleicht fällt irgend jemand noch eine Lösung ein.

          Gruß
          febel

          Comment


          • #6
            Hallo Christian,

            wenn ich alles richtig verstanden habe, dann ist das eigentlich kein Problem. Beispiel:
            Code:
            create table #a (a int)
            create table #b (b int)
            create table #c (c int)
            --
            insert into #a (a) values(1)
            insert into #a (a) values(2)
            insert into #a (a) values(3)
            --
            insert into #b (b) values(3)
            insert into #b (b) values(4)
            insert into #b (b) values(5)
            --
            insert into #c (c) values(3)
            insert into #c (c) values(33)
            insert into #c (c) values(333)
            --
            select a.a, b.b, (1.1 + b.b) * 100 / 3 as Schwachsinn, char(64 + b.b) as Letter
            into #GehtDoch
            from #a a
            	inner join #b b on b.b = a.a
            where b.b in (select c from #c c)
            --
            select * from #GehtDoch
            --
            drop table #a
            drop table #b
            drop table #c
            drop table #GehtDoch
            Du musst natürlich darauf achten, das innerhalb des SELECT alle Felder einen definierten, eindeutigen Namen haben. Dann ist das kein Problem!

            Viele Grüße
            Olaf

            Comment


            • #7
              Ich weiß, dass die Antwort relativ spät ist, aber ich bin gerade bei Recherchearbeiten über die Lösung gestolpert.
              Die Lösung ist schlicht aber genial.
              Falls jemand sonst hier noch nach einer Lösung sucht wie man nur die Tabellenstruktur einer Tabelle OHNE Datensätze kopieren kann:

              select top 0 * into DestinationTable from StructureSource;

              Comment


              • #8
                Hallo Timo,

                es geht sogar noch etwas kürzer und allgemeiner:

                select * into NewTab from SourceTab where 0=1

                Gruß
                Olaf

                Comment

                Working...
                X