nach mehren Eigenschaften suchen und gruppiert ausgeben

Commu

Benutzer
Beiträge
12
Hallo Zusammen,

ich habe eine Tabelle die eine M:N Beziehung zwischen 2 Tabellen hertellt.

Beispiel :
id|wert|atribut
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1
4 | 2 | 2
5 | 2 | 3
6 | 3 | 1
7 | 4 | 2

Wenn das Atribut 1 gesucht werden soll, soll in die Ausgabe 1, 2 und 3 angezeigt werden. Wenn ich dann das atribut 2 hinzufüge so soll die Ausgabe nur die werte 1 und 2 Anzeigen.

SELECT wert
FROM tabelle
WHERE atribute = 1

aber wie mache ich das mit dem 2. Atribut?

Danke für die Hilfe
 
Werbung:
Ich glaube, die Frage habe ich nicht auf Anhieb verstanden, aber ich habe ein wenig gespielt, und kam auf die werte 1 und 2...

Keine Ahnung, ob das irgendwie in MySQL möglich ist, in meinem Fall nutze ich PostgreSQL ;)

Code:
create table tabelle(id integer, wert integer, atribut integer);

Ein paar Werte einfügen:
Code:
insert into tabelle values (1, 1, 1), (2, 1, 2), (3, 2, 1), (4, 2, 2), (5, 2, 3), (6, 3, 1), (7, 4, 2);

Eine Abfrage:
Code:
select wert from tabelle where atribut = 1;

Resultat:
Code:
1
2
3

Zweite Abfrage:
Code:
with recursive werte(wert, atribut) as (
select wert, atribut from tabelle where atribut = 1
    union
select wert, atribut from tabelle where atribut = 2
) select atribut from werte group by atribut;

Resultat:
Code:
1
2

geht bestimmt auch eleganter, aber auf die Schnelle aufgebaut...
 
Ich suche die Schnittmenge von den Eigenschaften, mit UNION DISTINCT sollte das funktionierne

select wert from tabelle where atribut = 1
union distinct
select wert from tabelle where atribut = 2

Vielen dank
 
Du kannst auch einfach ein IINER JOIN verwenden

Code:
SELECT t1.wert
FROM tabelle t1
INNER JOIN tabelle t2 ON t1.wert = t2.wert
WHERE t1.atribut = 1 AND t2.atribut = 2;
 
... oder einfach froh sein, daß es HAVING gibt:

Code:
postgres=# select * from commu ;
 id | wert | attrubut 
----+------+----------
  1 |    1 |        1
  2 |    1 |        2
  3 |    2 |        1
  4 |    2 |        2
  5 |    2 |        3
  6 |    3 |        1
  7 |    4 |        2
(7 rows)

postgres=# select wert, count(1) from commu where attrubut in (1,2) group by wert having count(1) = 2;
 wert | count 
------+-------
    1 |     2
    2 |     2
(2 rows)

postgres=#
 
Werbung:
... oder einfach froh sein, daß es HAVING gibt:
Jooo, bei dieser großen Tabelle macht das nix, aber HAVING wird erst nach dem SELECT ausgeführt. Somit hast einen großen RESUt SET. Dein where attrubut in (1,2) macht aber auch Probleme wenn du mehrfach 1 oder 2 als Wert hast

LG Bernd und schönen 1 Mai
 
Zurück
Oben