Entwickler-Ecke

Datenbanken - select query mit join - wie doppelte Datensätze vermeiden


motion - So 22.07.07 00:14
Titel: select query mit join - wie doppelte Datensätze vermeiden
unter Firebird 2.0
OHNE "group by" zu verwenden?

Eine SQL soll nur diejenigen Daten aus der Tabelle "Lagerkarte" anzeigen, deren Detail-Tabelle "Artikelhistorie" den Suchbegriff "BMW" enthält. Während ich hier noch an der Gesamt-SQL Feile verwende ich Konstanten, die ich dann später durch Parameter ersetzen werde.

hier der SQL:

SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
select 
einkaufhistorie.text,Lagerkarte.ref,
Lagerkarte.bestellnr,lagerkarte.lagerort,
Lagerkarte.mindestmenge,
lagerkarte.artikelname,lagerkarte.bestand,
lagerkarte.ekpreis, lagerkarte.vkpreis
from lagerkarte
inner join einkaufhistorie
on lagerkarte.ref=einkaufhistorie.ref0
where lagerkarte.keinlagerteil=0 and (upper(einkaufhistorie.text) containing 'BMW' or (upper(einkaufhistorie.kurzname) containing 'BMW'))
and einkaufhistorie.datum>='1.10.2006'
or ((Lagerkarte.mindestmenge>0) and (lagerkarte.mindestmenge<lagerkarte.bestand))


lagerkarte.ref ist der PK der Tabelle "Lagerkarte" und es soll von der lagerkarte nur jeweils eine Zeile angezeigt werden. Es gibt jedoch Artikel, die mehrfach z.B. bei BMW eingekauft wurden und dann hier mehrfach in der Ergebnismenge auftauchen.


motion - So 22.07.07 00:53

Ich glaube, die Lösung habe ich gefunden:

"select distinct Lagerkarte.ref," löst das Problem, weil das erste Feld einkaufhistorie.text nur testcharacter hat und nicht benötigt wird. Der Rest der Zeile ist dann wirklich gleich und mittels distinct gibt es dann diese Zeile nur einmal.