Beschränkungen

TeJay

Neuer Benutzer
Beiträge
4
Hallo Leute :)

Bitte helft mir bei dieser Aufgabe ...

"Beschränken Sie die Abfrage auf die Leser, die mehr als ein Buch ausgeliehen haben."

select * from t_verleih;

+---------------+-------+------------+
| isbn | leser | datum |
+---------------+-------+------------+
| 1-254-56649-0 | 1 | 2001-11-25 |
| 1-234-56789-0 | 1 | 2001-11-25 |
| 1-285-54709-0 | 2 | 2001-11-27 |
| 1-285-54709-0 | 3 | 2001-11-29 |
| 1-444-46232-0 | 4 | 2001-03-23 |
| 1-37-473275-0 | 4 | 2001-03-23 |
| 2-423-421252- | 3 | 2001-11-29 |
+---------------+-------+------------+
7 rows in set (0,00 sec)
Ich komme nun nicht mehr weiter, ich hab folgendes versucht:
mysql> select leser, count(*) from t_verleih where count(*) > 1 group by leser;
Danke für jede Antwort :)
TeJay
 
Werbung:
Hallo Leute :)

Bitte helft mir bei dieser Aufgabe ...

"Beschränken Sie die Abfrage auf die Leser, die mehr als ein Buch ausgeliehen haben."

select * from t_verleih;

+---------------+-------+------------+
| isbn | leser | datum |
+---------------+-------+------------+
| 1-254-56649-0 | 1 | 2001-11-25 |
| 1-234-56789-0 | 1 | 2001-11-25 |
| 1-285-54709-0 | 2 | 2001-11-27 |
| 1-285-54709-0 | 3 | 2001-11-29 |
| 1-444-46232-0 | 4 | 2001-03-23 |
| 1-37-473275-0 | 4 | 2001-03-23 |
| 2-423-421252- | 3 | 2001-11-29 |
+---------------+-------+------------+
7 rows in set (0,00 sec)
Ich komme nun nicht mehr weiter, ich hab folgendes versucht:
mysql> select leser, count(*) from t_verleih where count(*) > 1 group by leser;
Danke für jede Antwort :)
TeJay

Immerhin scheinst ja selber etwas versucht zu haben, um Deine Hausaufgabe zu lösen, da will ich mal nicht so sein ;-)
Die Richtung stimmt grob, aber nur grob. Um das Resultat einer Aggregatfunktion im WHERE auszuwerten brauchst Du HAVING:

Code:
test=*# select * from foo;
 id
----
  1
  2
  2
  3
  3
  3
(6 rows)

Time: 0,137 ms
test=*# select id from foo group by id having count(*) > 1 ;
 id
----
  3
  2
(2 rows)


Sollte exakt so auf Deine Aufgabe und MySQL übertragbar sein (ich arbeite mit PG), die genaue Anpassung überlasse ich Dir zur Übung.


Andreas
 
Werbung:
select * from t_verleih;

+---------------+-------+------------+
| isbn | leser | datum |
+---------------+-------+------------+
| 1-254-56649-0 | 1 | 2001-11-25 |
| 1-234-56789-0 | 1 | 2001-11-25 |
| 1-285-54709-0 | 2 | 2001-11-27 |
| 1-285-54709-0 | 3 | 2001-11-29 |
| 1-444-46232-0 | 4 | 2001-03-23 |
| 1-37-473275-0 | 4 | 2001-03-23 |
| 2-423-421252- | 3 | 2001-11-29 |
+---------------+-------+------------+


Weil mir das grad so auffällt: falls man mit ISBN-Nummern arbeitet und vermeiden will, ungültige ISBN-Nummern in der DB zu speichern, könnte die Prüfung auf valide ISBN auch der Datenbank überlassen ;-)

Dazu braucht man allerdings PostgreSQL und ein Modul, welches aber in einer Standard-Installation mit dabei ist: isn.

Demo:

Code:
test=# create extension isn;
CREATE EXTENSION
Time: 177,629 ms
test=*# select isbn('1-444-46232-0');
ERROR:  invalid check digit for ISBN number: "1-444-46232-0", should be 6
LINE 1: select isbn('1-444-46232-0');
                    ^
Time: 0,220 ms
test=*# select isbn('1-444-46232-6');
    isbn
---------------
1-4444-6232-6
(1 row)
 
Time: 0,161 ms

Nach der Installation der Extension steht ein zusätzlicher Datentyp isbn zur Verfügung. Man hat nun alle Möglichkeiten der DB, damit zu arbeiten. Z.B. Prüfen auf Validität. Die Doku dazu enthält weitere Anwendungsfälle.


Andreas
 
Zurück
Oben