Matthias: Kleines SQL-Problem

Hallo,

ich suche nach einer Möglichkeit mittels eines SQL-Befehls alle Spaltennamen einer Tabelle in eine andere einzulesen:

Tab A
a --- b ---- c --- d --- e --- f --- g --- h
x --- x ---- x --- x --- x --- x --- x --- x
x --- x ---- x --- x --- x --- x --- x --- x
x --- x ---- x --- x --- x --- x --- x --- x
x --- x ---- x --- x --- x --- x --- x --- x

soll in Tab B eingefügt werden ->

Tab B
"spalten"
a
b
c
d
e
f
g
h

Hat da jemand eine Idee wie man sowas mittels SQL realisieren kann?

Mit "INSERT INTO "Tab b" (spalten) VALUE (SELECT....) wird es ja nicht funktionieren.

Grüße, Matthias

  1. Hallo,

    jenachdem welchen Datenbanktyp Du verwendest, kannst Du die entsprechenden Tabelleneigenschaften per SQL aus dem DB Repository auslesen und deren Werte in die zweite Tabelle einfügen.

    Gruß

    Slaughter

    1. Hallo,

      Datenbanktyp ist MySQL,
      Tabellentyp ist MyISAM.

      Mit Repositories habe ich leider noch keine Erfahrungen gemacht.

      Grüße, Matthias

  2. Hallo Matthias,

    Hat da jemand eine Idee wie man sowas mittels SQL realisieren kann?
    Mit "INSERT INTO "Tab b" (spalten) VALUE (SELECT....) wird es ja nicht funktionieren.

    möglicherweise suchst Du MySQL 5 Reference Manual: INSERT ... SELECT Syntax. Ich weiß jedoch nicht, ob das eine MySQL-Erweiterung ist oder ob es Teil des SQL-Standards ist.

    Grüße aus Stockholm,
    Götz

    --
    Losung für Freitag, 7. Dezember 2007
    Führe mich aus dem Kerker, dass ich preise deinen Namen. (Psalm 142,8)
    Zur Freiheit hat uns Christus befreit! So steht nun fest und lasst euch nicht wieder das Joch der Knechtschaft auflegen! (Galater 5,1)
    1. Hallo,

      da SELECT ja Daten aus einer Tabelle ausliest und dabei die Tabellenköpfe geflissentlich ignoriert bringt mir der Ausdruck nichts. Ich wollte damit nur verdeutlichen, dass ich etwas in der "Art" brauche.

      Grüße, Matthias

      1. Hallo Matthias,

        [...] bringt mir der Ausdruck nichts.

        das wage ich zu bezweifeln.

        Grüße aus Stockholm,
        Götz

        --
        Losung für Freitag, 7. Dezember 2007
        Führe mich aus dem Kerker, dass ich preise deinen Namen. (Psalm 142,8)
        Zur Freiheit hat uns Christus befreit! So steht nun fest und lasst euch nicht wieder das Joch der Knechtschaft auflegen! (Galater 5,1)
  3. n'abend,

    ich suche nach einer Möglichkeit mittels eines SQL-Befehls alle Spaltennamen einer Tabelle in eine andere einzulesen:

    vielleicht hilft dir das SHOW COLUMNS (aka DESCRIBE) Statement weiter?

    Mit "INSERT INTO "Tab b" (spalten) VALUE (SELECT....) wird es ja nicht funktionieren.

    SELECT ist nicht so ganz dein Freund, da du ja statt der Daten der Tabelle eher die Metadaten (oder eigentlich eher Strukturinformationen) der Tabelle auslesen möchtest. Mit »INSERT INTO ... SELECT ...« bist du an sich mal nicht auf dem Holzweg. Folgendes scheint aber wohl (zumindest unter MySQL 5.0.45) nicht zu funktionieren:

    INSERT INTO counting (name)  
      SELECT t.Field  
      FROM (  
        SHOW COLUMNS  
        FROM tabellenName  
        FROM datenbankName  
      ) AS t;  
      
    /* Wirft Fehler:  
     * #1064 - You have an error in your SQL syntax;  
     * check the manual that corresponds to your MySQL  
     * server version for the right syntax to use  
     * near 'SHOW COLUMNS  
     */
    

    Scheinbar lässt sich mit der Ergebnismenge eines SHOW Statements in kapselnden Queries nichts mehr weiter anfangen.

    Eine weitere Möglichkeit wäre ggf die information_schema Datenbank, sofern du Zugriff darauf hast. Die Tabelle "columns" enthält alle relevanten Werte:

    SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = 'datenbankName' AND TABLE_NAME = 'tabellenName'

    Ist auch das nicht der Fall, wird dir vermutlich nur noch eine Option bleiben; In der ersten Abfrage die Werte ermitteln (SHOW COLUMNS), in deiner Applikation (PHP, Python, Java, wasAuchImmer) die Daten in Form eines INSERT Statements aufbereiten und dieses wieder auf die DB feuern.

    weiterhin schönen abend...

    --
    #selfhtml hat ein Forum?
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
    1. Hallo,

      danke für die Ideen,

      mit SHOW COLUMNS und DESCIPTION habe ich es schon versucht, das Problem dabei ist halt, dass ich immer mehr bekomme als ich will, wie z.B. Feldtyp usw.

      Dein Vorschlag

      "SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = 'datenb1' AND TABLE_NAME = 'testtabelle'"

      ergibt leider

      #1146 - Table 'datenb1.columns' doesn't exist

      1. n'abend,

        mit SHOW COLUMNS und DESCIPTION habe ich es schon versucht, das Problem dabei ist halt, dass ich immer mehr bekomme als ich will, wie z.B. Feldtyp usw.

        nicht benötigte Informationen kann man ja ausblenden (weg projezieren).

        Dein Vorschlag
        "SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = 'datenb1' AND TABLE_NAME = 'testtabelle'"
        ergibt leider
        #1146 - Table 'datenb1.columns' doesn't exist

        nun, vermutlich, weil ich ein »USE information_schema« vorangestellt hatte. Probier es mal mit:

        SELECT COLUMN_NAME  
          FROM information_schema.COLUMNS  
         WHERE TABLE_SCHEMA = 'datenb1'  
           AND TABLE_NAME = 'testtabelle'
        

        weiterhin schönen abend...

        --
        #selfhtml hat ein Forum?
        sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
        1. Hallo,

          das wars, danke!
          Für alle die vielleicht ein ähnliches Problem haben:

          INSERT INTO datenb1.testtabelle_b (feld) SELECT COLUMN_NAME
            FROM information_schema.COLUMNS
           WHERE TABLE_SCHEMA = 'datenb1'
             AND TABLE_NAME = 'testtabelle'

          Grüße, Matthias