Announcement

Collapse
No announcement yet.

2 Tabellen per JOIN miteinader verknüpfen

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

  • 2 Tabellen per JOIN miteinader verknüpfen

    Gudde ihr Lieben,

    zu allererst, ich bin nicht sooo bewandert in SQL, hatte es vor 2 Jahren mal in der Schule gehabt..
    Jetzt zu meinem Problem:

    ich schlage mich jetzt schon seit 2-3 std mit einer Kleinigkeit rum die eigentlich nicht der Rede wert ist...
    Ich habe 2 Tabellen einmal haendler und einmal adressdaten, sowohl die Tabelle haendler als auch die Tabelle adressdaten haben eine id spalte welche mit auto increment deklariert ist.
    Jetzt will ich per Befehl eine Zuweisung anstoßen so das der haendler mit der ID 1 den adressdaten mit der ID 1 zugeordnet wird.
    Mein eingestaubtes und sowieso kaum vorhandes Wissen kam am Anfang auf die INNER JOIN variante.. bekamm da aber nur leeren Wert zurück.
    Dann erinnerte ich mich an LEFT JOIN, damit funkitonierte es aber auch nicht so das in der Tabelle haendler die ID von der Tabelle adressdaten eingetragen wurde, in der Tabelle haendler ist natürlich eine entsprechende Spalte für die adressdatenID vorhanden..
    Also entweder ist mein Ansatz komplett falsch oder ich habe eine winzig kleine kleinigkeit übersehen xD

    Ich hoffe ich konnte es halbwegs verständlich erklären

    Gruß Klapp3k
    Zuletzt editiert von Klapp3k; 04.10.2016, 17:31.

  • #2
    Sei doch bitte so nett und poste hier die Tabellendefinition und Deine beiden Join Versuche. Letztere wären beide ein gangbarer Weg, je nach Anforderung. Da bei Dir kein Ergebnis erscheint, scheint aber das Problem woanders zu liegen.
    Gruß, defo

    Comment


    • #3
      Nur um Missverständnisse aufzuklären: Ein JOIN ist nicht zum Schreiben da. Weil Du schreibst Du möchtest Dem Kunden eine Adresse zuordnen. Für die Zuordnung musst Du selbst sorgen. Du musst praktisch in der Tabelle mit den Adressen einen Datensatz anlegen, Dir dessen ID holen und diese dann in der Kunden Tabelle ablegen. Danach kannst Du beim Lesen über einen JOIN diese Daten miteinander verknüpfen. Für den Fall dass es in der Kunden Tabelle ein Feld adress_id gibt was in der Adress Tabelle auch so heisst, sieht die Abfrage so aus:

      Code:
      SELECT *
      FROM adresse a
      JOIN kunde k WHERE a.adress_id = k.adress_id

      Comment


      • #4
        Daneben gibt es auch weitere JOIN-Typen: http://www.codeproject.com/Articles/...n-of-SQL-Joins
        MfG
        Cheat-Sheets for Developers / Programming Quotes

        Comment


        • #5
          Hallöchen,

          danke für eure Antworten, konnte leider letzte Woche krankheitsbedingt nicht an meiner Datenbank arbeiten.
          Okay also kann ich mit JOIN nicht Tabelleneinträge zusammenschreiben z.B die AdressID die in beiden Tabellen vorhanden ist?

          Ach ja meine beiden JOIN Versuchen waren bis jetzt:

          Code:
          SELECT IDadresse
          FROM haendler
          LEFT JOIN adressdaten
          ON (haendler.IDadresse = adressdaten.AdressID )
          ;
          Und der andere Versuch war:
          Code:
          SELECT IDadresse
          FROM haendler
          JOIN adressdaten
          ON (haendler.IDadresse = adressdaten.AdressID )
          ;
          Ich erhalte beim Joinen keine Fehlermeldung...nur bekomme ich auch nix angezeigt.
          Um mir Daten aus einer anderen Tabelle zu holen und diese in die andere reinzuschreiben, so wie es fanderlif geschrieben hat, müsste ich eine WHILE Schleife schreiben, oder?

          Gruß Klapp3k

          Comment


          • #6
            Man kann schon UPDATE Statements schreiben die ein SELECT beinhalten. Wenn Du wirklich in die Kundentabelle die AdressID verwenden willst die dieselbe wie die HaendlerID ist, dann kannst Du folgendes machen:

            Code:
            UPDATE Haendler SET AdressID = Haendler
            Und natuerlich dann den Commit nicht vergessen, wenn es das tut was Du willst

            Comment


            • #7
              Okay cool danke dir :-)
              aber ich will ja das in der Tabelle haendler in der Spalte IDadresse die ID aus der Tabelle adressdaten reinkommt.
              Wenn ich das jetzt so schreibe wie oben beschrieben dann bekomme ich den Fehler: "#1054 - Unknown column 'AdressID' in 'field list'"

              Schreibe ich den Befehl so:
              UPDATE Haendler SET IDadresse = adressdaten.AdressID;

              bekomme ich den gleichen Fehler :-/

              Comment


              • #8
                Na aber woher soll er denn dann wissen welche Adresse er welchem Haendler zuordnen soll? Oder ist die HaendlerID dieselbe wie die AdressID? Typischerweise ist das nicht so und man sollte sich auch nicht drauf verlassen dass das fuer immer so bleibt.

                Comment


                • #9
                  Naja da jeder Hänlder eine Adresse hat, sind es im Grunde genommen genausoviel ID´s in beiden Tabellen vorhanden. Ich musste das Problem auf die schnelle lösen, und habe mir aus dem phpAdmin eine csv datei gezogen und dann die AdressID in der Händler Tabelle quasi "manuel" vergeben...
                  Die Datenbank musst leider schnell zur anderen Abteilung, aber ich würde gerne wissen wie den die elegante Lösung gewesen wäre ;-)

                  Comment


                  • #10
                    na wenn die verschiedene IDs haben, dann geht das gar nicht. Woher soll denn ein Stueckchen Code Wissen zu welchem Kunden welche Adresse gehoert?

                    Comment


                    • #11
                      Im Grunde genommen haben sie die gleichen ID´s.
                      Also Der Händler an der ersten Position hat die ID 1
                      In der Adress Tabelle gehört die Adresse an der Position 1 mit der ID 1 zum Händler mit der ID 1

                      Comment


                      • #12
                        Ok, ich habe glaube ich verstanden was du machen möchtest.

                        Folgende Testdaten habe ich aufgebaut:

                        [highlight=sql]
                        create table t_haendler (haendler_id number, adress_id number, bezeichnung varchar2(100));

                        create table t_adressdaten (adress_id number, adresse varchar2(100));

                        insert into t_haendler
                        (
                        select 1, null, 'Jürgen' from dual
                        union all
                        select 2, null, 'Der Ralle' from dual
                        union all
                        select 3, null, 'Der mit dem Hut' from dual
                        );

                        insert into t_adressdaten
                        (
                        select 1, 'Finkenstr. 7' from dual
                        union all
                        select 2, 'Superstr. 8' from dual
                        union all
                        select 3, 'Hustenkamp 50' from dual
                        );
                        [/highlight]

                        select * from t_haendler;
                        HAENDLER_ID ADRESS_ID BEZEICHNUNG
                        1 Jürgen
                        2 Der Ralle
                        3 Der mit dem Hut
                        select * from t_adressdaten;
                        ADRESS_ID ADRESSE
                        1 Finkenstr. 7
                        2 Superstr. 8
                        3 Hustenkamp 50
                        Wir haben nun keine Adress-ID in der Händler Tabelle. Brauchen wir auch nicht, wenn haendler_id = adress_id ist, denn dafür haben wir ja SQL.

                        [highlight=sql]
                        select *
                        from t_haendler h
                        inner join t_adressdaten a
                        on (h.haendler_id = a.adress_id);
                        [/highlight]

                        HAENDLER_ID ADRESS_ID BEZEICHNUNG ADRESS_ID ADRESSE
                        1 Jürgen 1 Finkenstr. 7
                        2 Der Ralle 2 Superstr. 8
                        3 Der mit dem Hut 3 Hustenkamp 50
                        Alternativ können wir auch die Adress_ID übernehmen.
                        [highlight=sql]
                        update t_haendler h
                        set h.adress_id =
                        (select a.adress_id
                        from t_adressdaten a
                        where a.adress_id = h.haendler_id);
                        [/highlight]

                        select * from t_haendler;

                        HAENDLER_ID ADRESS_ID BEZEICHNUNG
                        1 1 Jürgen
                        2 2 Der Ralle
                        3 3 Der mit dem Hut
                        An die SQL Profis: Ist das correlated update Statement richtig?

                        Comment


                        • #13
                          Wow, sau nice , vielen vielen Dank :-) werde ich gleich mal ausprobieren :-)
                          Hatte es gestern auch mit Update versucht aber wahrscheinlich einen Logik Fehler gehabt...war glaube ich nah dran xD

                          Comment


                          • #14
                            Freut mich wenn ich helfen konnte

                            Comment


                            • #15
                              Originally posted by FlexGer View Post
                              An die SQL Profis: Ist das correlated update Statement richtig?
                              Hier vieles nicht richtig
                              1. Adresse und Händer sind in diesem Modell eine 1:1 Beziehung, wieso dann überhaupt aufteilen? Richtig ist es die Händerid in den Adressatz aufzunehmen, dann kann ein Händer auch mehrere Adressen besitzen. Des weiteren einen FK Constraint auf die Händerid, die dann natürlich auch als PK in der Datenbank definiert werden muss.
                              2. Es wird angenommen, dass die Händerid und die Adressid miteinander korrelieren. Würde es einen Superlativ für falsch geben, wäre er das. Die PK Werte von verschiedenen Tabellen haben nichts, aber auch gar nichts miteinander zu tun.
                              Das das hier funktioniert liegt nur an den gefakten Daten.
                              3. Korrelierter Update ohne einschränkende WHERE Bedingung ist immer ein bissl heikel, da die Felder aus den Zeilen die nicht über den Join verbunden werden, auf NULL gesetzt werden. Meistens sind solche Update Statements die Ursachen für das misteriöse Verschwinden von Daten
                              Zitat Tom Kyte:
                              I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

                              Comment

                              Working...
                              X