Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

SQl-Abfrage die zweite

8 views
Skip to first unread message

Lothar Geyer

unread,
Apr 11, 2012, 5:35:27 PM4/11/12
to
Ich habe drei Tabellen, vereinfacht etwa so:

1) Tabelle Firmen: FirmaID, FirmenName
2) Tabelle Niederlassungen: FirmaID, NlNummer, PLZ, Ort
3) Tabelle Lieferanten: Artikel, FirmaID, NlNummer

In der Tabelle Lieferanten ist nur auf einige der Einträge in Tabelle
Firmen verwiesen (soll heißen: in Tabelle Firmen gibt es nicht nur
Lieferanten)

Nun will ich eine Liste aller Lieferanten mit Firmenname, PLZ und Ort,
die in Tabelle Lieferanten verwendet werden. Wenn es nicht um die
Niederlassungen ginge, hätte ich eine Lösung:

(verkürzt)
Select * From Firmen Where FirmaID in (Select Distinct FirmaID From
Lieferanten)

Aber beim "Dazulesen" der Felder aus Tabelle Niederlassungen komme ich
nicht weiter.

Danke schon mal im Voraus.

Lothar Geyer

Peter Schneider

unread,
Apr 11, 2012, 6:31:56 PM4/11/12
to
Ich verstehe ja ehrlich gesagt nicht, wieso bei solchen Fragen hier niemals
dazu geschrieben wird, wie die Keys auf den Tabellen aussehen.

Also: was ist Primary Key, was ist Secondary/Unique Key, wie sehen die FKs aus?

Das mag hier offensichtlich sein, wenn die Keys aber nicht wirklich als
Constraints so implementiert sind, wie sie sich hier aufdrängen, dann kann man
auch keine korrekte Antwort geben.

Gruß
Peter

--
The only way to keep your health is to eat what you don't want, drink what
you don't like, and do what you'd rather not. -- Mark Twain

Lothar Geyer

unread,
Apr 11, 2012, 7:09:57 PM4/11/12
to
Hallo Peter,

Am 12.04.2012 00:31, schrieb Peter Schneider:
> Am 11.04.2012 23:35, schrieb Lothar Geyer:
>> Ich habe drei Tabellen, vereinfacht etwa so:
>>
>> 1) Tabelle Firmen: FirmaID, FirmenName
>> 2) Tabelle Niederlassungen: FirmaID, NlNummer, PLZ, Ort
>> 3) Tabelle Lieferanten: Artikel, FirmaID, NlNummer
>>
>> In der Tabelle Lieferanten ist nur auf einige der Einträge in Tabelle
>> Firmen
>> verwiesen (soll heißen: in Tabelle Firmen gibt es nicht nur Lieferanten)
>>
>> Nun will ich eine Liste aller Lieferanten mit Firmenname, PLZ und Ort,
>> die in
>> Tabelle Lieferanten verwendet werden. Wenn es nicht um die
>> Niederlassungen
>> ginge, hätte ich eine Lösung:
>>
>> (verkürzt)
>> Select * From Firmen Where FirmaID in (Select Distinct FirmaID From
>> Lieferanten)
>>
>> Aber beim "Dazulesen" der Felder aus Tabelle Niederlassungen komme ich
>> nicht
>> weiter.
>
>
> Ich verstehe ja ehrlich gesagt nicht, wieso bei solchen Fragen hier
> niemals dazu geschrieben wird, wie die Keys auf den Tabellen aussehen.
>
> Also: was ist Primary Key, was ist Secondary/Unique Key, wie sehen die
> FKs aus?

Tabelle Niederlassungen: FK auf Firmen über FirmaID
Tabelle Lieferanten: FK auf Niederlassungen über FirmaID + NlNummer
(und noch einige andere)

> Das mag hier offensichtlich sein, wenn die Keys aber nicht wirklich als
> Constraints so implementiert sind, wie sie sich hier aufdrängen, dann
> kann man auch keine korrekte Antwort geben.

Das dachte ich eben auch: dass das offensichtlich ist ;-)

Lothar Geyer

Lutz Donnerhacke

unread,
Apr 12, 2012, 9:06:17 AM4/12/12
to
SELECT * FROM Firmen
WHERE FirmaID IN (SELECT FirmaID FROM Lieferanten
UNION
SELECT n.FirmaID FROM Niederlassungen n, Lieferanten l
WHERE l.NlNummer = n.NlNummer
);

Annahme dabei ist, daß die Tabellen so definiert sind:

CREATE TABLE Firmen (
FirmaID int not null primary key,
FirmenName varchar(80) not null unique
);

CREATE TABLE Niederlassungen (
NlNummer int not null primary key,
FirmaID int not null references Firmen(FirmaID),
PLZ varchar(20),
Ort varchar(120) not null,
);

CREATE TABLE Lieferanten (
Artikel varchar(80) not null,
FirmaID int references Firmen(FirmaID),
NlNummer int references Niederlassungen(NlNummer),
contraint "Lieferant fehlt" check(Coalesce(FirmaID,NlNummer) IS NOT NULL)
);
0 new messages