Announcement

Collapse
No announcement yet.

SQL für absoluten Anfänger

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

  • SQL für absoluten Anfänger

    Aloha liebe Gemeinde,

    Ich sollte vielleicht erst einmal sagen, das ich blutiger Anfänger bin im Bezug auf SQL 2000. Deswegen wende ich mich an euch.

    Nun zu meinem Problemchen:

    Ich habe Tabelle A mit einem Feld AA und Feld AB. Feld AA ist ein eindeutiger Indentifier. Das Feld AB soll mit der Zahl 1 versehen werden wenn Feld BA aus Tabelle B identisch mit dem Feld CA aus der Tabelle C ist. Das Problem ist das Tabelle C auch doppelnennungen haben kann, ich diese aber nicht mit aufgezeigt bekommen möchte.

    Untenstehend der Code mit dem ich denke das es klappen könnte.

    update TABLE_A set FIELD_AA = 1 where ??????????????? (select DISTINCT FIELD_BA, FIELD_CA from TABLE_B, TABLE_C where FIELD_BA = FIELD_CA)

    Nur irgendwie komme ich nicht weiter, daher meine Frage an euch.....


    Greets,

    dodger

  • #2
    Hallo dodger,

    irgendwie fehlt da ja auch noch eine Beziehung. In welcher Relation steht den TabelleA zu B und C?

    Für deine Frage könnte ein Statement so aussehen:
    [highlight=sql]
    update TABLE_A set
    FIELD_AA = 1
    where exists (
    select 'X' from TABLE_B, TABLE_C
    where FIELD_BA = FIELD_CA)
    [/highlight]
    Dabei werden aber ALLE DS in TabelleA auf 1 geändert, sobald es EINE Übereinstimmung für BA = CA gibt!

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Tabelle B und C enthalten Servernamen, wobei Tabelle C weit aus mehr Servernamen aufweist als Tabelle B. Die Reihen in Feld B in Tabelle A sollen Einträge ( eine 1 ) bekommen sobald Übereinstimmungen zwischen Tabelle B und C vorhanden sind.

      Eines sollte ich noch sagen das der Unique Identifier zwischen Tabelle A ( Feld A ) und Tabelle B ( Feld Z ) der selbe ist.

      Hoffe ich habe mich verständlich ausgedrückt.

      Greets,

      The Dodger

      Comment


      • #4
        Originally posted by dodger View Post
        ...Hoffe ich habe mich verständlich ausgedrückt....
        Äh, ... Nein
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Mal etwas "bildlicher" gesprochen:
          Du möchtest in BuchA die Seite mit einer "1" markieren, wenn in BuchB etwas steht was auch in BuchC steht. Dann mußt du in BuchA alle Seiten markieren, sobald die Bedingung zutrifft, da es keine Relation zwischen BuchA und B bzw. C gibt!
          Dir fehlt jetzt noch die Beziehung das z.B. die Seitennr. vom BuchA dann gleich der Seitennr. vom BuchB oder vom BuchC ist ...

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Hi Falk,

            das mir die Relation zwischen A und B fehlte ist mir nach dem durchlesen Deiner Antwort dann auch aufgefallen. Vielen Dank schon mal dafür.

            Also stellt sich das jetzt so dar:

            Tabelle A Tabelle B Tabelle C

            Feld AA = UID Feld BA = UID Feld CA = Servername
            Feld AB = leer Feld BB = Servername

            Die Relation wäre also Feld AA zu Feld BA und Feld BB zu Feld CA.
            Feld CA enthält viel mehr Servernamen als Feld BB.

            Feld AB soll mit einer 1 gefüllt werden sofern Feld BB und Feld CA gleich sind. Dies soll aber Zeile für Zeile geschehen.

            Jetzt alle Klarheiten beseitigt ?

            Gruß,

            Michael

            Comment


            • #7
              Im Prinzip kannst du dann das bereits gepostete Statement nehmen, muß es nur um die zusätzliche Relation erweitern
              [highlight=sql]
              UPDATE TABLE_A SET
              AB = 1
              WHERE AA IN (
              SELECT BA FROM TABLE_B, TABLE_C
              WHERE BB = CA)
              [/highlight]

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Falk,

                das läuft .... Vielen vielen Dank, ich habe mir Tager darüber den Kopf zerbrochen.

                Gruß,

                Michael

                Comment


                • #9
                  Aloha liebe Gemeinde,

                  nachdem das eine Problem gelöst wurde, hätte ich eine weitere Frage:

                  Das o.a. Statement würde ich gerne folgendermassen anpassen:

                  Tabelle A Tabelle B Tabelle C

                  Feld AA = UID Feld BA = UID Feld CA = Servername
                  Feld AB = leer Feld BB = Servername Feld CB = verschiedene Daten

                  Die Relation wäre also Feld AA zu Feld BA und Feld BB zu Feld CA.
                  Feld CA enthält viel mehr Servernamen als Feld BB.


                  Feld AB soll mit den Daten aus CB gefüllt werden sofern Feld BB und Feld CA gleich sind. Dies soll Zeile für Zeile geschehen.

                  Ich hatte es mit dem o.a. Statement versucht aber leider klappt das nicht wie erwartet.

                  Gruß,

                  Michael

                  Comment


                  • #10
                    Hallo Michael,

                    das Funktioniert nur, wenn sich deine Relation eindeutig auflösen läßt, also Feld AA zu Feld BA und Feld BB zu Feld CA muß eindeutig einen DS spezifizieren.
                    [highlight=sql]
                    UPDATE TABLE_A outA SET
                    outA.AB = (select inC.CB FROM TABLE_B inB, TABLE_C inC
                    WHERE inB.BB = inC.CA
                    AND inB.BA = outA.AA)
                    WHERE outA.AA IN (
                    SELECT BA FROM TABLE_B, TABLE_C
                    WHERE BB = CA)
                    [/highlight]

                    Gruß Falk
                    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                    Comment


                    • #11
                      Hallo Falk,

                      mir ist gerade aufgefallen das ich einen grossen Fehler in der Aufstellung habe, sorry:

                      Hier die korrigierte:

                      Tabelle A Tabelle B

                      Feld AA = UID Feld BA = Servername
                      Feld AB = Servername Feld BB = verschiedene Daten
                      Feld AC = Leer


                      Die Relation wäre also Feld AB zu Feld BA.
                      Feld BA enthält viel mehr Servernamen als Feld AB.

                      Feld AC soll mit den Daten aus BB gefüllt werden sofern Feld AB und Feld BA gleich sind. Dies soll Zeile für Zeile geschehen.

                      Sorry nochmals,

                      Michael

                      Comment


                      • #12
                        Das ändert ja nichts an der Aufgabe an sich, tausch halt die Felder entsprechend gegeneinander aus.

                        Gruß Falk
                        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                        Comment


                        • #13
                          Irgendwie bin ich zu Beep!!!!

                          Ich bekomme jetzt: "Cannot resolve collation conflict for equal to operation"

                          Statement welches ich verwende ist:

                          Code:
                          UPDATE TABLE_A SET
                            AC = (Select BB from TABLE_A, TABLE_B 
                          WHERE AB IN (
                            SELECT BA FROM TABLE_A, TABLE_B
                            WHERE AB = BA)
                          Gruß,

                          Michael
                          Zuletzt editiert von dodger; 30.10.2007, 17:06. Reason: typos

                          Comment


                          • #14
                            Hallo Michael,

                            das hört sich so an, als hätten Deine (VAR)CHAR-Felder unterschiedliche COLLATIONs, also Sortierreihenfolge, das solltest Du mal im Tabellen-Entwurf prüfen.

                            Olaf
                            Olaf Helper

                            <Blog> <Xing>
                            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                            Comment

                            Working...
                            X