paul: sql abfrage: nur bestimmte SPALTEN abfragen?

hier erstmal eine beispieltabelle:

id auto_farbe auto_ps auto_preis fahrrad_farbe fahrrad_preis

1   rot         120    20000        grün         200
2   gelb        100     3000        blau         400

ich würde gerne eine SQL-Abfrage mit nur den Spalten, die "auto_" enthalten, erstellen.

"händisch" wäre das also:

SELECT auto_farbe, auto_ps, auto_preis FROM tabelle

wie kann ich aber die bedingung "enthält 'auto_' " innerhalb einer SQL-Abfrage formulieren?

  1. Hallo Paul,

    id auto_farbe auto_ps auto_preis fahrrad_farbe fahrrad_preis
    ich würde gerne eine SQL-Abfrage mit nur den Spalten, die "auto_" enthalten, erstellen.

    SELECT auto_farbe, auto_ps, auto_preis FROM tabelle

    wie kann ich aber die bedingung "enthält 'auto_' " innerhalb einer SQL-Abfrage formulieren?

    zum Beispiel mittel einer Stored Procedure, die das Information_Schema oder etwas Vergleichbares dazu befragt.

    Freundliche Grüße

    Vinzenz, der so etwas nicht als sinnvoll erachtet.

    1. echo $begrüßung;

      » wie kann ich aber die bedingung "enthält 'auto_' " innerhalb einer SQL-Abfrage formulieren?
      zum Beispiel mittel einer Stored Procedure, die das Information_Schema oder etwas Vergleichbares dazu befragt.

      Mal abgesehen, dass auch ich für den Fall des OP eine geeignetere Struktur als Lösung ansehe, wie würdest du allein mit Mitteln des DBMS eine Abfrage mit veränderlicher Spaltenanzahl realisieren? Soweit ich weiß gibt es kein eval(), um einen String als Statement ausführen zu lassen. (Zumindest nicht unter MySQL. Vielleicht kennen andere DBMS etwas derartiges.)

      echo "$verabschiedung $name";

      1. Hello,

        Soweit ich weiß gibt es kein eval(), um einen String als Statement ausführen zu lassen. (Zumindest nicht unter MySQL. Vielleicht kennen andere DBMS etwas derartiges.)

        SQL-Server kann soetwas z.B. in Form von EXEC.

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        Don't lick your wounds: celebrate them. The scars you bear are the signs of a competitor.  --  character Richard Webber on Grey's Anatomy: 'Where the wild things are'
        1. besser

          EXEC sp_executesql @stmt, @paramsdeclaration, @params[]

  2. Hi,

    ich würde gerne eine SQL-Abfrage mit nur den Spalten, die "auto_" enthalten, erstellen.

    es ist unmöglich, dass ein Teil des Spaltennamens für die Selektion von Bedeutung ist - es sei denn, Dein DB-Layout ist defekt. Beschäftige Dich mit Normalisierung.

    "händisch" wäre das also:

    "Automatisch" wäre es "SELECT foo, bar, qaz FROM tabelle WHERE baz='auto'".

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. es ist unmöglich, dass ein Teil des Spaltennamens für die Selektion von Bedeutung ist

      -verstehe ich nicht ganz: ich kann ja auch z.B zwischen "*" für "alle spalten" und eben händisch ausgewählten spalten unterscheiden. warum soll es dann nicht sinnvoll sein, nur spalten mit "auto_" auswählen zu wollen?

      »» "händisch" wäre das also:

      "Automatisch" wäre es "SELECT foo, bar, qaz FROM tabelle WHERE baz='auto'".

      hä? das würde aber voraussetzten, dass in besagten tabellenzeilen in der entsprechenden spalte "auto" vorkommt, dort wird aber eher "bmw" oder "audi" stehen...

      1. Hi,

        -verstehe ich nicht ganz: ich kann ja auch z.B zwischen "*" für "alle spalten" und eben händisch ausgewählten spalten unterscheiden.

        abgesehen davon, dass "*" nur ein Shortcut für Testzwecke ist, ...

        warum soll es dann nicht sinnvoll sein, nur spalten mit "auto_" auswählen zu wollen?

        ... ist der *Name* der Spalte für die Menschenlesbarkeit von Bedeutung, unter keinen Umständen aber für den Inhalt.

        »» "Automatisch" wäre es "SELECT foo, bar, qaz FROM tabelle WHERE baz='auto'".
        hä? das würde aber voraussetzten, dass in besagten tabellenzeilen in der entsprechenden spalte "auto" vorkommt, dort wird aber eher "bmw" oder "audi" stehen...

        In der Spalte "baz" steht 'auto' (bzw. ein anderer, sinnvoller Wert wie z.B. 1). Nachdem Du Dich mit Normalisierung beschäftigt hast.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. yo,

          abgesehen davon, dass "*" nur ein Shortcut für Testzwecke ist, ...

          wie kommst du auf diese idee ? * macht genau das, was es machen soll, nicht mehr und nicht weniger und das bezieht sich nicht nur auf testzwecke. und was die normaliseirung betrifft, so kannst du das gar nicht wissen, ob es nicht normalisiert ist, ohne seine hintergründe zu kennen. das thema datenbanken scheint nicht dein steckenpferd zu sein.

          Ilja

      2. Hi!

        Cheatah ist heute extrem nett und hat nicht einfach gesagt, dass dein Tabellenkonstrukt Mist ist, sondern dich auf Normalisierung hingewiesen. Deine Tabelle taugt schlicht nix.

        Erklaer mir doch mal vernuenftig, was ein rotes Auto mit 120 PS fuer 20.000 Euro mit einem gruenen Fahrrad fuer 200 Euro gemein haben. Gibts das jeweilige Fahrrad immer zum Auto dazu, oder was?

        Ansonsten hast Du ja schon ein funktionierendes SQL Statment abgeliefert: SELECT auto_farbe, auto_ps, auto_preis FROM tabelle

        Was fuer ein Problem hast Du denn damit?

        --
        "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
              - T. Pratchett
        1. Hi,

          Ansonsten hast Du ja schon ein funktionierendes SQL Statment abgeliefert: SELECT auto_farbe, auto_ps, auto_preis FROM tabelle
          Was fuer ein Problem hast Du denn damit?

          Wahrscheinlich die Tipparbeit für

          auto_farbe, auto_ps, auto_preis

          statt

          auto_*

          F