Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Halwin am Dezember 06, 2012, 17:29:35

Titel: Abfrage nur erfolgreich wenn alle Werte aus Bedingung vorhanden
Beitrag von: Halwin am Dezember 06, 2012, 17:29:35
Hallo zusammen,

ich stehe grad auf dem Schlauch.

Habe eine Tabelle in der Unternehmen stehen, die Produkte herstellen. Auf diese Tabelle möchte ich nun eine Abfrage setzen, die alle Unternehmen zurück liefert, die Schokolade (ProduktId 1) und Pudding (ProduktId 2) herstellen.

Die Tabelle enthält die unter anderem die Splaten Uid und ProduktId.

Es sollen aber im Ergebnis nur die Unternehmen angezeigt werden, die Schokolade UND Pudding produzieren.

Gibt es da eine Bedingung die direkt das richtige Ergebnis bringt oder muss ich mir da etwas wie eine Zwischenabfrage "basteln" die z.B. die Id's summiert und dann mit der Summe der Id's vergleicht, die ich als Filter übergeben habe?

Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt  ???

Lieben Gruß
Halwin
Titel: Re: Abfrage nur erfolgreich wenn alle Werte aus Bedingung vorhanden
Beitrag von: DF6GL am Dezember 06, 2012, 17:37:36
Hallo,

es fehlt eine Tabelle ("tbl_UnternehmenProdukte") , die eine Zuordnung von Produkten zu einem Unternehmen herstellt.



Zitatdie Schokolade UND Pudding produzieren

ist mit lediglich einer Tabelle "tbl_Unternehmen" nicht abbildbar und somit nicht auszuwerten.
Titel: Re: Abfrage nur erfolgreich wenn alle Werte aus Bedingung vorhanden
Beitrag von: Halwin am Dezember 06, 2012, 17:54:51
ich wusste ich habe vergessen was zu erklären :(

Ich habe natürlich eine Tabelle Unternhemen in der gibt es u.a. uid und Name der Firma, Dann habe ich eine Tabelle Produkte. Da stehen die ProduktId und der Name des Produktes drin. die Dritte Tabelle enthält die Zuordnung von Unternehmen zu Produkt. Angenommen ich habe 2 Unternehmen und 4 Produkte. In der Zuordnung steht

UidProdId
11
12
13
22
23
24

select distinct uid from zuordnung where uid =3 liefert demnach 2 Zeilen. Eine mit uid 1 und eine mit uid 2.

wie sieht aber das statement aus wenn ich alle uid's haben will die 1 UND 2 als ProdId haben. Also nur Ergebnis liefern wenn auch beide ProdId's zum gleichen Unternehmen in der Tabelle sind!

Mit in(1,2) geht's nicht, weil das ja entweder oder  bedeutet.

Geht das immer noch einfach mit der Zwischetabelle? Und wenn ja, wie???
Titel: Re: Abfrage nur erfolgreich wenn alle Werte aus Bedingung vorhanden
Beitrag von: Beaker s.a. am Dezember 06, 2012, 18:15:33
Hallo Halwin,
ZitatMit in(1,2) geht's nicht, weil das ja entweder oder  bedeutet.
Genau, denn Schokolade kann kein Pudding sein (UND).
Versuch's mal mit ODER
... WHERE ProdID = 1 OR ProdID = 2
Datenbanklogik  ;D
gruss ekkehard
Titel: Re: Abfrage nur erfolgreich wenn alle Werte aus Bedingung vorhanden
Beitrag von: Halwin am Dezember 06, 2012, 18:26:37
uhhh da muss ich dich korrigieren
select distinct uid from zuordnung where prodId = 1 or prodId = 2 liefert in meinem beispiel 2 Zeilen zurück

Unternehmen 1 hat Schokolade (1) UND Pudding (2)
Unternehmen 2 NUR Pudding(2)

Ich will aber nur die Unternehmen als Ergebnis, die Schoki UND Pudding haben. Das geht mit einer einfachen OR Bedingung nicht. Bin ich da auf dem Holzweg ;)

Datenbanklogik   ;D

Gruß Olli

PS im statement im vorigen post von mir muss es natürlich ProdId und nicht Uid in der where Bedingung heißen... shame on me ;)
Titel: Re: Abfrage nur erfolgreich wenn alle Werte aus Bedingung vorhanden
Beitrag von: DF6GL am Dezember 06, 2012, 20:55:34
Hallo,



z. B.:

Select tbl_Unternehmen.U_Name
From (tbl_Zuordnung  INNER JOIN tbl_Unternehmen ON tbl_Zuordnung.UP_UID = tbl_Unternehmen.UID) INNER JOIN tbl_Produkte ON tbl_Zuordnung.UP_ProdID = tbl_Produkte.Prodid
Where tbl_Zuordnung.UP_ProdID=1 Or tbl_Zuordnung.UP_ProdID=2
Group by tbl_Unternehmen.U_Name, tbl_Zuordnung.UP_ProdID
Having  Count(*)=2
Titel: Re: Abfrage nur erfolgreich wenn alle Werte aus Bedingung vorhanden
Beitrag von: Beaker s.a. am Dezember 06, 2012, 21:14:02
Hallo Halwin,
Sorry, zu flüchtig gelesen.
Franz Lösung sollte aber passen (nicht getestet).
gruss ekkehard
Titel: Re: Abfrage nur erfolgreich wenn alle Werte aus Bedingung vorhanden
Beitrag von: Halwin am Dezember 06, 2012, 21:29:51
Hi,

der Vorschlag von Franz sieht sehr gut aus. Werd ich gleich mal ausprobieren.

Danke
Titel: Re: Abfrage nur erfolgreich wenn alle Werte aus Bedingung vorhanden
Beitrag von: Halwin am Dezember 07, 2012, 16:51:19
feedback:

Die Abfrage funktioniert  so leider nicht. Habe sie etwas umgestalltet und mich an einem Beispier orientier, das ich woanders gefunden hatte...

SELECT tblNV.*, tblSV.*,
-((tblNV.fld1=tblSV.fld1) + (tblNV.fld2=tblSV.fld2) + (tblNV.fld3=tblSV.fld3)  + (tblNV.fld4=tblSV.fld4)) AS MatchCount
FROM tblNV, tblSV;

Jetzt muss man nur noch eine Where-Bedingung dran basteln die da heißt:

where MatchCount = (Anzahl Tabellen in From) -1  bzw. = 1 wenn es nur eine Tabelle ist
Titel: Re: Abfrage nur erfolgreich wenn alle Werte aus Bedingung vorhanden
Beitrag von: DF6GL am Dezember 07, 2012, 19:27:05
Hallo, 


was genau funktioniert an meiner Version nicht?


Dein Beispiel kommt mir (jedenfalls) sehr suspekt vor...  ;)


PS: sehe gerade darin noch die Angabe eines falschen Tabellenamens.. Habe mein Posting dahingehend korrigiert.