Autor Beitrag
eternity
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Mo 04.08.03 16:39 
Hallöchen !

Mein Prob.:
Ich habe zwei Tabellen. Tab1 und Tab2.

Wie kann ich auf den Inhalt beider Tabs zugreifen ohne mit einen zweiten Query zu picken ?
Ist es überhaupt möglich ?

Ich hab von Befehlen wie CREATE VIEW und JOIN gelesen. Nur leider waren diese Beispiele bei mir nicht funktionabel.

Beispiele wie...

SELECT * FROM Tab1,Tab2 WHERE u.s.w.

funktionieren bei mir nicht.


Was mache ich falsch ?

Für ein einfaches Beispiel bin ich sehr Dankbar.



Mit freundlichen Grüßen
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 04.08.03 17:59 
Versuch mal
ausblenden Quelltext
1:
SELECT tab1.*, tab2.* FROM tab1,tab2					

als Anfang, danach kann ich Dir joins näher bringen. Was hat denn bei der obigen Abfrage nicht funktioniert?
eternity Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Di 05.08.03 11:45 
Titel: Was hat nicht funktioniert !
Im Grunde genau das was ich oben meinte !

Noch mal eine bessere Erklärung!

Ein Beispiel:
Ich habe zwei DB´s. Ich nenne sie Artikel.DB und Kosten.DB.
In der der Artikel.DB ist ein Feld Namens Match.
In der Kosten.DB ist ein Feld Namens EK.

Wie kann ich jetzt mit einer SELECT-Anweisung auf beide Felder in zwei verschiedenen DB´s zugreifen, ohne bei einer dieser DB zu picken ?

Wenn ich die SELECT-Anweisung folgendermaßen ausführe, bekomme ich immer eine Fehlermeldung,das der Pfad nicht stimmt.


SELECT Match Artikel, EK Einkauf FROM "Artikel.DB, Kosten.DB"


So habe ich es in manchen Erklärungen rausgelesen.
Aber funktionieren tut es trotzdem nicht.


Also, wie soll es dann funzen ?
Vielleicht habe ich auch einen Denkfehler.


Mit freundlichen Gruß
neojones
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1206
Erhaltene Danke: 1



BeitragVerfasst: Di 05.08.03 12:00 
Also, die Abfrage kann so nicht gehen.

Wenn überhaupt, dann so:

ausblenden Quelltext
1:
SELECT Match AS Artikel, EK AS Einkauf FROM Artikel, Kosten					


Und das Resultat ist das kartesische Produkt, d.h. jeder Datensatz aus der einen Tabelle wird mit jedem aus der anderen Verbunden. Will heißen, hast Du in der Tabelle Artikel folgende Werte:

1 Schuhe
2 Jacken
3 Hosen

und in Kosten diese Werte

1 4 EUR
2 6 EUR
1 8 EUR
3 9 EUR

dann ist die Ergebnismenge:

1 Schuhe 1 4 EUR
1 Schuhe 2 6 EUR
1 Schuhe 1 8 EUR
1 Schuhe 3 9 EUR
2 Jacken 1 4 EUR
2 Jacken 2 6 EUR
2 Jacken 1 8 EUR
2 Jacken 3 9 EUR
3 Hosen 1 4 EUR
3 Hosen 2 6 EUR
3 Hosen 1 8 EUR
3 Hosen 3 9 EUR

Wenn Du nun in Deiner Abfrage eine WHERE-Klausel einbaust, die die Zuordnung regelt, z.B. so:

ausblenden Quelltext
1:
SELECT Match AS Artikel, EK AS Einkauf FROM Artikel, Kosten WHERE Artikel.Match = Einkauf.Match					


dann wird zuerst das virtuelle kartesische Produkt wie oben beschrieben aufgebaut und dann werden die Werte rausgesucht, die den Kriterien entsprechen. Folge: Es wird ätzend langsam. Hier gibt dann JOINS. z.B. so:

ausblenden Quelltext
1:
SELECT Match AS Artikel, EK AS Einkauf FROM Artikel LEFT JOIN Kosten ON Artikel.Match = Einkauf.Match					


dann wird gleich das korrekte Ergebnis aufgebaut:

1 Schuhe 1 4 EUR
1 Schuhe 1 8 EUR
2 Jacken 2 6 EUR
3 Hosen 3 9 EUR

Viele Grüße,

Matthias

_________________
Ha! Es compiliert! Wir können ausliefern!
eternity Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Di 05.08.03 15:05 
Titel: Mal wieder !
Als erstes muß ich mal ein Lob vergeben für die schnellen Antworten !

Ich muß mich mal entschuldigen. Die obrige Anweisung funktioniert doch so, wie Ihr es angegeben habt.
Da ist denn das aufgetreten was "neojones" geschrieben hat.
Diese Variante hatte ich vorher schon mal ausprobiert, da ging es aber nicht.
Ist komisch - erst geht es nicht und dann plötzlich doch.
Ich denke mal, daß ich doch noch irgendwo einen Fehler drinn hatte.

Wie auch immer, auf jedem Fall komme ich mit dieser Logik nicht so richtig klar.
Ich hab ja schon alles mögliche geproggt und immer hinbekommen aber das ist der Hammer.

Ich komme mit diesem String nicht klar:

SELECT Match AS Artikel, EK AS Einkauf FROM Artikel, Kosten WHERE Artikel.Match = Einkauf.Match


Im Grunde müßte die Anweisung ja in etwa so aussehen:

Query1.SQL.TEXT:='SELECT Match AS "'+[Quellpafd_Artikel_DB]+'"'+
'EK AS "'+[Quellpfad_Einkauf_DB]+'"'+
' FROM "'+[Quellpfad_Artikel_DB]+'","'+[Quellpfad_Einkauf_DB]+'" WHERE ............ ????????????????


Ich krieg es einfach nicht hin !


Ich werd jetzt noch mal ein bischen probieren.... Vielleicht klapps ja doch noch.



Mit freundlichen Gruß
neojones
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1206
Erhaltene Danke: 1



BeitragVerfasst: Di 05.08.03 15:08 
Also ich würd auf keinen Fall die Verknüpfungsanweisung ins WHERE setzen. Das geht bei wenigen Datensätzen noch gut, aber später wirds heikel.

Ich würde das in die ON-Condition im JOIN setzen.

Viele Grüße,

Matthias

_________________
Ha! Es compiliert! Wir können ausliefern!
eternity Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Di 05.08.03 15:49 
Titel: Schon wieder!
Würde ich ja gerne tun !

Wenn der String mal funzen würde. Und das tut er ja nicht.

Ich weiß im Grunde nicht einmal ob das richtig ist !


Überall bekomme ich zwar Informationen wie es (theoretisch) funzt
so wie das z.B.
Das ist hier jetzt nicht mein Problem. Es geht hier um die Basis.

SELECT rechnung_pos.artikel_id , artikel.art_nummer FROM rechnung_pos
INNER JOIN art_nummer ON rechnung_pos.artikel_id = artikel.artikel_id
ORDER BY art_nummer.artikel

(Quelle Google)


Ist ja alles in Ordnung, bloß wie setze ich mein Prob. Progtechnisch um ?
Der vorab geschilderte String von mir (ist nur nen Auszug gewesen) auch mit dem Join funktioniert es bei mir nicht. Kommt immer ne Fehlermeldung das ein Feld nicht gefunden wird.


Ich habe bis jetzt noch keinen Quellcode über diese Thematik gefunden.


Ich will echt nicht Nerven.
Aber ich kann gewisse Sachen nur verstehen, wenn sie funzen.


Mit freundlichen Gruß
neojones
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1206
Erhaltene Danke: 1



BeitragVerfasst: Di 05.08.03 16:00 
Okay, dann gib hier mal den kompletten String wieder, wie Du ihn bis jetzt drin hast sowie die komplette Struktur der beiden Tabellen und wie Deine Ergebnismenge aussehen soll.

Viele Grüße,

Matthias

_________________
Ha! Es compiliert! Wir können ausliefern!
eternity Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Di 05.08.03 16:56 
Titel: Bitte!
Ok, soweit habe ich gerade rausgefunden das die Anweisung:
SELECT irgendwas AS Name auch nur ein Alias ist so wie diese schreibweise:
SELECT irgendwas Name, u.s.w.

Ich komme bloß nicht klar mit dem ...
Tab1 LEFT JOIN Tab2 ON Tab1.feld=Tab2.feld

Ich bekomme immer eine Fehlermeldung Invalid fieldname.


Zur Tabellenstruktur:
------------------------
Zwei Tabllen mit je einem Feld (Datensätze sind Optional). Sagen wir einfach pro Tabelle 10 Datensätze.
Feldwerte sind sagen wir in der
Artikel.DB = Artikel A-J
Kosten.DB = 1-10

Artikel.DB:
Feldname0 = Match (string)
Kosten.DB:
Feldname0 = EK (integer)

Die Variablen:
----------------
art_pfad:='C:\kunde\ARTIKEL.DB';
kos_pfad:='C:\kunde\KOSTEN.DB';


Meine Anweisung zur Zeit:
------------------------------
Query1.SQL.Text:=('SELECT Match AS Artikel,EK AS Preis FROM "'+art_pfad+'" LEFT JOIN "'+kos_pfad+'" ON ->ab hier habe ich das Prob.


In dem DBGrid soll jetzt der Inhalt aus zwei DB´s angezeigt werden:
(Nur eine Illustration)

Artikel Preis
---------------------------------
Artikel A 1
Artikel B 2
Artikel C 3

u.s.w.


So, ich hoffe ich habe ausreichend Infos geliefert.

Im Grunde ganz einfach.






Mit freundlichen Gruß
neojones
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1206
Erhaltene Danke: 1



BeitragVerfasst: Di 05.08.03 17:19 
Ja, was hast Du denn in der ON-Condition geschrieben?

Du brauchst noch ein Feld, über das Du die Zuordnung machst. Die Tabellen müssten also so aussehen:

Artikel
id int
bezeichnung char

Kosten
id int
artikel_id int
kosten

Dann schaut der JOIN so aus:

LEFT JOIN Artikel ON Artikel.id=Kosten.artikel_id

_________________
Ha! Es compiliert! Wir können ausliefern!
eternity Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Di 05.08.03 18:19 
Titel: Geschafft !
Hi!

LEFT JOIN Artikel ON Artikel.id=Kosten.artikel_id

Diese Art mit punktnotation, funktioniert bei mir aus welchen Gründen auch immer, immer noch nicht.

Aber gut: Was auf jedem Fall funktioniert ist:

LEFT JOIN Artikel ON id=artikel_id

Warum auch immer; keine Ahnung!
Aber es funzt wie ich es Möchte............. soweit ! :P


Ich habe festgestellt das es keine Denkfehler sind sondern unwissenheit in dieser Materie.
Aber man kann nur dazu lernen.

Jetzt bin ich soweit am Ende meines Ziels.......

......und Bedanke mich noch Recht Herzlich für die freundliche und ausdauernde unterstützung an alle mitmirkenden und Speziell für den letzten Tip der im Grunde den Durchschlag brachte.


Mit freundlichen Gruß