Announcement

Collapse
No announcement yet.

Select mit Alias Spalten und where

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

  • Select mit Alias Spalten und where

    Hallo liebe Leute,

    ich hab ein Problem mit einer Abfrage - reduziert aufs Wesentliche:
    Code:
    select ID,Name, 
    (
    select X from TabelleX
    join TabelleY on ID=...
    ) as NewCol
    from 
    TabelleZ
    where ID=..
    and NewCol=..
    das Problem ist nun, daß der Alias (NewCol) im "übergeordneten" SelectTeil nicht zur Verfügung steht also die where Bedingung nicht anwendbar ist.
    Ergoogelt hab ich dann eine Ansatz
    Code:
    select *
    from 
       (
       select a + b as aliased_column
       from table
       ) dt
    where dt.aliased_column = something.
    wenn ich jetzt meine Abfrage in diese Form bringe, dann hab ich das Problem, daß "ID" im inneren Select Statement (NewCol) nicht mehr zur Verfügung steht - also der Innere Teil nicht mehr geht. Ich bin jetzt mit meinen Fähigkeiten vorerst am Ende... kann mir wer bitte weiterhelfen.

    2te kurze Frage - wie lange (Anzahl Zeichen) ? oder wieviele "...and ID =XX" Anweisungen verkraftet ein SQL Statement (MS SQL 2008R2) eigentlich - weil das wird dynamisch von der Applikation generiert und ich möchte es in der Applikation begrenzen bevor eine SQL Grenze erreicht wird..

    - danke für Eure Hilfe & Kommentare

    Gruß
    Michael

  • #2
    .. irgendwie kenn ich mich jetzt nicht mehr aus - aber mit dem zweiten CodeBlock hat es jetzt auf einmal funktioniert - keine Ahnung was ich da vorher falsch gemacht hab...
    - danke
    - bleibt nur mehr die 2te Frage bitte / danke ....

    Michael

    Comment


    • #3
      Ich denke MS SQL verkraftet sehr viele Spalten. Am Ende macht es ja jede Angabe die dort machst der DB leichter die Daten zu liefern. Jedes Statement dort schränkt die Daten mehr ein. Ich würde ein Problem sehen wenn da ein paar Tausend Ausdrücke stehen würden, aber dann wäre wohl auch das Design der Datenbank etwas fragwürdig

      Comment


      • #4
        Hallo michael99

        Statt Irrwege zu gehen, kannst du es auch direkt abfragen.
        Code:
        Select *
        from 
           (
           select a + b as aliased_column
           from table
           ) dt
        where dt.aliased_column = something.
        So kommst du zum gleichen Ergebnis, aber viel schneller und mit weniger Ressourcen:
        Code:
        Select 
        a + b as aliased_column
        ,*
        from  table
        where a + b = something.
        Also keine Sorge, jede bekanntere Datenbank hat Grenzen (bzgl Spalten, Daten, etc.), die nur mit Mutwillen und/oder Dummheit überschritten werden können.
        Hier die Spezifikation zum SQL Server 2008 R2.
        Am ehesten könnte noch das Limit von 4096 Zeichen pro Abfrage erreicht werden.
        Und Falk Prüfer sprach: Formatierung von SQL in Beiträgen

        Comment


        • #5
          Originally posted by knoxyz View Post
          Am ehesten könnte noch das Limit von 4096 Zeichen pro Abfrage erreicht werden.
          Du meinst wohl eher Spalten pro Abfrage.
          Bei Zeichen pro Abfrage dürfte wohl eher die Grenze "65.536 * Netzwerkpaketgröße" wirken.

          Comment


          • #6
            Hallo,

            - danke für die Antwort - das mit "a+b" war nur das GoogleBeispiel. Bei mir ist "a+b" ein Ausdurck mit 3 joins und die aliasedColumns sind ca. 10 an der Zahl. Ob das dann wirklich noch übersichtlich ist das bei where zu wiederholen ?

            Gruß
            Michael

            Comment


            • #7
              - danke für Eure Antworten und den link mit den Server-Grenzen

              Michael

              Comment

              Working...
              X