Abfrage mit Like über zwei Tabellen
Stefan
- datenbank
hallo,
ich habe eine Abfrage einer Access Datenbank so gelöst:
sql = "SELECT * FROM angebote WHERE (Region LIKE '%" & strRegion & "%' AND
Stadt LIKE '%" & strStadt & "%' AND Taetigkeit LIKE '%" & strTaetigkeit &
"%')"
klappt auch.
Allerdings möchte ich jetzt die gleichen Abfrage Kriterien nicht nur auf eine Tabelle sondern auf zwei beziehen.
Ein Versuch habe ich mit DISTINCT gemacht. Da bekomme ich aber alle Datensätze achtmal geliefert, also genau so oft, wie ich in SELECT DISTINCT Datenfelder abfrage. Wie klappt es, das jeder Datensatz nur einmal gezeigt wird.
tausend Dank
Stefan
Hier der Quellcode:
sql = "SELECT DISTINCT angebote.nummer, angebote.datum, angebote.Taetigkeit, angebote.Anbieter, angebote.Stadt, angebote.abdem, angebote.ab, angebote.erweitert, erweitert.nummer, erweitert.datum, erweitert.Taetigkeit, erweitert.Anbieter, erweitert.Stadt, erweitert.abdem, erweitert.ab, erweitert.erweitert FROM angebote, erweitert WHERE (angebote.Region LIKE '%" & strRegion & "%' AND angebote.Stadt LIKE '%" & strStadt & "%' AND angebote.Taetigkeit LIKE '%" & strTaetigkeit & "%') OR (erweitert.Region LIKE '%" & strRegion & "%' AND erweitert.Stadt LIKE '%" & strStadt & "%' AND erweitert.Taetigkeit LIKE '%" & strTaetigkeit & "%')"
rs.Open sql, connect
If Not (rs.BOF Or rs.EOF) Then
Do While Not rs.EOF
Hi,
Da bekomme ich aber alle Datensätze achtmal geliefert, also genau so oft, wie ich in SELECT DISTINCT Datenfelder abfrage. Wie klappt es, das jeder Datensatz nur einmal gezeigt wird.
war das eine Frage.
Ich finde in Deinem SQL-Statement keine Join-Bedingung. Deine aktuelle WHERE-Clause schränkt die Datensätze zwar ein; dennoch entspricht Dein Statement in etwa folgendem:
SELECT a.spalte FROM a, b
Wenn in a nun z.B. 10 Datensätze sind und in b 14, dann erhälst Du insgesamt 10*14 = 140 Ergebniszeilen.
Bei Dir passiert nichts anderes. Es werden (Ergebnisse aus angebote)*(Ergebnisse aus erweitert) Datensätze geliefert, über welche dann Dein DISTINCT läuft.
Also, sage der DB, welche Bedingung jeden Datensatz aus angebote mit _je einem_ Datensatz aus erweitert (oder umgekehrt) verknüpft, und alles wird gut[tm].
Cheatah
hallo Cheatah,
kannst _Du mir eventuell noch einen kleinen Tip gebeb, wie ich
Deinen Tipß am besten umsetzten kann?
Über Inner Join...?
danke Stefan
Also, sage der DB, welche Bedingung jeden Datensatz aus angebote mit _je einem_ Datensatz aus erweitert (oder umgekehrt) verknüpft, und alles wird gut[tm].
Cheatah
Hi,
kannst _Du mir eventuell noch einen kleinen Tip gebeb, wie ich
Deinen Tipß am besten umsetzten kann?
nein, weil ich nicht hellsehen kann. Du weißt (hoffentlich) selber, welche Spalte der einen Tabelle mit welcher Spalte der anderen Tabelle identisch sein muss, um zwei Datensätze als zueinandergehörend zu identifizieren.
Über Inner Join...?
Inner, Left, Right... irgendein Join halt. Die Doku Deines DBMS wird Dir mehr dazu sagen können. Ich bevorzuge die Variante "...AND tabelle1.spalteX = tabelle2.spalteY".
Cheatah