SQL-Abfragen

NadineF

Neuer Benutzer
Beiträge
4
Hi also ich hab folgendes Problem. Ich soll für die Uni folgende Abfragen durchführen:

5. Find pairs of ids such that the supplier with the first id charges more for some part than the supplier with the second id.
6. Find the ids of parts(pids) supplied by at least two different suppliers.

Wir arbeiten mit folgenden Tabellen :

- suppliers:
sid
sname
address
indexes: „suppliers_pkey“ primary key, btree(sid)

- parts:
pid
pname
color
indexes: „parts_pkey“ primary key, btree(pid)

- catalog:
sid
pid
cost
indexes: „catalog_pkey“ primary key, btree(sid,pid)

!!In der Angabe wurde jedoch folgendes vorgegeben:
Solve the queries only with the basic operators(projection, selection, cartesian product/join & set operators) —> do not use aggregation/subqueries

Habe bereits stundenlang in Foren gesucht jedoch immer nur Lösungen mit subqueries gefunden.
Wäre sehr dankbar falls mir jemand helfen könnte !
 
Werbung:
hilft Dir folgendes weiter?

Code:
test=*# select * from catalog ;
 sid | pid | cost
-----+-----+------
   1 |   1 |   10
   2 |   1 |   12
   1 |   2 |   20
   2 |   2 |   20
   3 |   2 |   20
(5 rows)

test=*# select c1.sid, c2.sid from catalog c1 join catalog c2 on (c1.pid = c2.pid and c1.cost != c2.cost and c1.sid > c2.sid);
 sid | sid
-----+-----
   2 |   1
(1 row)

test=*# select pid from catalog group by pid having count(sid) >= 2;
 pid
-----
   2
   1
(2 rows)

test=*#
 
Vielen Dank für die schnelle Antwort !
Prinzipiell schon ja aber meines Wissens ist count doch eine Aggregation oder ?
Weil wir dürfen eben keine Aggregationen verwenden... Geht es auch ohne oder gibt es eh keine andere Lösung.
LG
 
Die zweite Frage kann man mit einem self-JOIN auf die catalog Tabelle lösen:
Code:
select distinct c1.pid
from catalog c1
  join catalog c2 on c1.pid = c2.pid and c1.sid <> c2.sid
Das ist sicherlich wesentlich langsamer als die Lösung mit having.
Ausserdem "skaliert" es nicht wirklich. Je größer das "mindestens x" wird desto mehr joins braucht man.
 
Werbung:
jaa super vielen Dank !! Das ist sicher das was gemeint ist! Aggregationen haben wir noch nicht durchgemacht also dient es nur als Übung und dementsprechend ist Geschwindigkeit noch kein Thema :)
 
Zurück
Oben