Announcement

Collapse
No announcement yet.

SELECT bringt unerwartete Feldinhalte

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

  • SELECT bringt unerwartete Feldinhalte

    Hallo,
    seit einiger Zeit habe ich bemerkt, dass ein SELECT auf unsere Tabelle T152 unerwartete Ergbnisse bringt. Die Tabelle ist wie unten gezeigt aufgebaut.
    Ein SELECT * zeigt mir z.B. die Werte

    -032 X 33 6708
    -040 X 33 6708
    -010 E14.50 33 6708

    Tatsächlich müssten die Werte in der ersten Spalte aber lauten
    5232
    5240
    5210

    Im Programm wird mehrfach auf diese Tabelle zugegriffen (INSERT, UPDATE, DELETE) und es werden stets die "richtigen" Werte geliefert. Sonst wäre uns das längst aufgefallen. Es wäre also nichts Schlimmes. Dennoch bin ich etwas verwirrt. Das war noch vor längerer Zeit nicht so. Ist das neu in MySql 5.6? Ich muss dazu sagen: in allen Rows beginnt der Wert in der Spalte HKP01 mit 52, gefolgt von zwei weiteren Zahlen. Verkürzt das MySql auf einen Bindestrich? Gibt es einen anderen Befehl, der mir die richtigen Werte auflistet?

    Gruß Norbert


  • #2
    seit einiger Zeit habe ich bemerkt, dass ein SELECT auf unsere Tabelle T152 unerwartete Ergbnisse bringt.
    Auf den Grafiken ist nichts zu erkennen

    Prüfe, was in der DB steht
    select * from Tabelle where Spalte like'%-032%'
    oder
    select * from tabelle where Spalte<0
    Christian

    Comment


    • #3
      Danke Christian!
      Hat ne Weile gedauert den "Fehler" zu finden. Hab unser VB-Programm debuggt. In 2017 war ich mal ein paar Wochen nicht da und ein Kollege hat da etwas umprogrammiert. Wir haben nie darüber gesprochen, da es für Nix irgendeine Bedeutung hatte. Ist mir jetzt nur aufgefallen, wo ich das Dumpen (siehe voriger Post) programmiere.
      Danke, dass Du mir ein Stückchen Deines Sonntags geopfert hast.
      Viele Grüße
      Norbert

      Comment


      • #4
        Originally posted by strzata View Post
        ..
        Ein SELECT * zeigt mir z.B. die Werte
        ..
        -032 X 33 6708
        -040 X 33 6708
        -010 E14.50 33 6708
        ..
        Tatsächlich müssten die Werte in der ersten Spalte aber lauten
        5232
        5240
        5210
        Kleine Manöverkritik (weil es so ein gutes schlechtes Beispiel ist):

        Man bekommt es ja quasi in jedem 2. SQL Post um die Ohren gehauen:
        Select * ist böse..

        Nun, ist es natürlich nicht, nicht aktiv, nicht mal passiv.
        "Select * " ist einfach recht unspezfisch.

        Und das kann problematisch werden.

        In diesem Thread hier wird es besonders deutlich, weil auch mit der Verwendung des * und dem scheinbaren Fehler "falsche Werte in der ersten Spalte" genau diese Spalte namentlich nirgendwo (im Thread) auftaucht! Verdächtig oder?

        So wenn ich also unspezifisch und bequem einfach alle Spalten selektiere (mache ich gerne und oft), dann muss ich natürlich im Ergebnis ganz besonders darauf achten, den Zugriff auf die gewünschten Feldwerte namentlich exakt vorzunehmen!

        Denn tatsächlich liefert das "Select *" nicht nur unspezifisch alle definierten Spalten der Tabelle, es liefert sie auch in einer unspezifischen Reihenfolge. (Ähnlich wie die Datensätze in einer zufälligen Reihenfolge ausgegeben werden, solange man kein order by dazu schreibt)
        Wer also mit Select * arbeitet und ordinal auf die Spalten zugreift, begeht mit dieser Komibination einen "tödlichen" Fehler, obwohl beides einzeln vollkommen ok ist.

        Die überall geforderte explizite Angabe von Spaltennamen in der Select Clause definiert offensichtlich nicht nur die zurückgegebenen Felder selbst, sondern auch ihre Reihenfolge!

        Jetzt kann man sich fragen, warum Spalten plötzlich die Reihenfolge wechseln sollten. Das ist legitm, aber müßig, sie können es halt und zwar ohne Ankündigung. Vielleicht ein DDL Statement auf der Tabelle oder im View, vielleicht ein Versionswechsel oder Patch, ..

        Fazit: Wenn schon schlampig, dann aber richtig.


        Ob das nun von mir beschriebene Problem auch die Ursache für diesen Thread ist, sei dahingestellt. Es ist im Grunde egal, ob versehentlich hier eine falsche Spalte ausgewertet wurde oder an anderer Stelle falsche Daten geschrieben wurden
        Zuletzt editiert von defo2; 12.08.2019, 15:04.

        Comment


        • #5
          Sollte wirklich jeder drüber nachdenken! Ich habs getan.

          Comment

          Working...
          X