SQL und aktueller Datensatz
-
Hallo,
ich habe trotz Bemühen der Hilfe und Suchfunktion keine Antwort auf mein Problem finden können.
Wie kann man einer SQL-Anfrage beibringen nicht zwei ganze Tabellen, sonder nur den aktuellen Datensatz der ersten Tabelle mit der kompletten zweiten Tabelle zu vergleichen?
Vielen Dank für Eure Antworten.
Ciao
Loriat
-
so glaub ich gar nicht!
SQL ist zum abfragen einer oder mehrer tabellen gedacht. anhand von indizes oder feldern werden die daten in den tabellen verglichen und zurückgegeben. du könntest dir nur helfen, in dem du den entsprechenden datensatz direkt mit deiner 2. tabelle vergleichst.
// statt Query1->SQL->Clear(); Query1->SQL->Add("SELECT * FROM tabelle1, tabelle2"); Query1->Open();
// lieber AnsiString feld1 = Tabelle1->FieldByName("Feld1")->AsString; AnsiString feld2 = Tabelle1->FieldByName("Feld2")->AsString; AnsiString feld3 = Tabelle1->FieldByName("Feld3")->AsString; // usw... Query1->SQL->Clear(); Query1->SQL->Add("SELECT * FROM tabelle2 WHERE FeldA = " + feld1 + " AND FeldB = " + feld2 + " AND FeldC = " + feld3); Query1->Open();
-
Hallo,
da SQL eine Datenmenge selectiert, ist die Frage nach dem aktuellen Datensatz etwas merkwürdig.
Wenn du genau einen Datensatz mit irgend etwas vergleichen willst, musst du eben in der WHERE Bedingung genau den Datensatz selektieren der dann dein "aktueller" ist.Was heist eigentlich Vergleichen, willst du eine Verknüpfung der Datensätze aus beiden Tabellen über ein Feld erreichen oder was machst du ?
Gruß Mikel
-
Hallo,
schonmal besten Dank für die Antworten. Es mag sein, dass ich irgendwo einen Denkfehler habe. Ich habe folgendes vor:
Ich habe drei Tabellen: Artikel, Kunden, Sonderpreise.
In der dritten Tabelle habe ich die Felder Kundennummer, Artikelnummer und Preis. Wenn ich nun in der Tabelle "Kunden" einen Datensatz auswähle und in der Tabelle "Artikel" auch, dann soll mir der Computer in einem Ausgabefeld einfach nur den, für den aktuellen Kunden gültigen Preis für den aktuellen Artikel ausgeben.Es kann ja sein, dass ich da mit SQL ein wenig mit Kanonen auf Spatzen schieße, aber möglich muss das doch sein.
Schön wäre gewesen wenn:
.....
where
current k.kundennummer = s.kundennummer
and
current a.artikelnummer = s.artikelnummermöglich wäre.
Ciao
Loriat[ Dieser Beitrag wurde am 25.06.2003 um 17:33 Uhr von Loriat editiert. ]
-
Hallo,
gib doch bitte mal die Struktur der drei Tabellen an, vor allem deine Key-Felder.
Arbeitest du mit TTabel und DBGrid oder mit TQuery und irgendwelchen Eingabefeldern (also nicht Datensensitiv ?)Gruß Mikel
-
Hi Mikel,
also die drei Tabellen bestehen aus folgenden Felder:
Feldname Typ Schlüssel
Artikel.db
Artikelbezeichnug A *
Artikelnummer + *
Artikeltext M
Preis NSonderpreise.db
Kundennummer S *
Artikelnummer S *
Preis NKundentabelle.db
Kundenname A *
Kundennummer + *
Strasse A
Anschrift2 A
...
...
...Ich denke der Rest der dritten Tabelle spielt keine Rolle mehr. Kannst Du damit was anfangen?? Und vielen Dank für Deine Mühe!
Ciao
Loriat
-
Anhang:
Ich arbeite mit TTable, die Abfrage läuft im TQuery und die meisten Daten werden in diesem Fall im DBEdit ausgegeben.
Ciao
Loriat
-
Also nehmen wir mal an du wählst einen Kunden und einen Artikel aus, dann hast du doch sowohl die Kundennummer wie auch die Artikelnummer.
Damit wäre der SQL einfach:
SELECT * FROM Sonderpreis
WHERE Kundennummer := kundennummer and Artikelnummer =:artikelnummerOder willst du so was doch über datensensitive Komponenten lösen.
Wie wird der Artikel und der Kunde gewählt, in einem DBGrid oder DBloockup ??Gruß Mikel
-
Hi Mikel,
da es ja keine Möglichkeit gibt, die Auswahl an Kunden- bzw. Artikelnummern per SQL auf den aktuellen Datensatz zu beschränken, muss ich die beiden Daten als Variabel in die SQL einbinden, oder? Wenn dem so ist, sind wir nah an dem was Sunday oben gepostet hat. Es sei denn ich habe hier alles falsch verstanden.
Vielen Dank für Deine Mühe.
Ciao
Loriat
-
Hallo,
besten Dank an Mikel und Sunday. Ich habe es mit Eurer Hilfe hinbekommen. Ich hatte aber noch einen dicken Denkfehler drin, hatte eine der Tabellen auch auf einem anderen Form angelegt und musste diese dann nehmen!! Wie konnte ich nur so blind sein! Aber nun lüppet die Sache. :-))))))
Ciao
Loriat