Um solch eine Abfrage zu tätigen, benötigst du INNER JOIN
.
The INNER JOIN keyword selects records that have matching values in both tables.
Wählen wir die Käufer des Bildes "Sterne" mit ID 29, da das Bild "Mond" nicht gekauft wurde (siehe Tabelle Abdruck):
SELECT abdruck.kundenid, kunde.vorname, kunde.nachname FROM `abdruck`
INNER JOIN `kunde`
ON abdruck.kundenid = kunde.id
WHERE `bildid` = 29 # id29 = Sterne
Sqlfiddle:
http://sqlfiddle.com/#!9/28dc34/4Ausgabe:
kundenid
| vorname | nachname |
2 | Benno | Brause |
3 | Bernd | Pause |
Wichtig: Bei gekauftVon
(bzw. kundenid
) auf keinen Fall den Benutzernamen, sondern die Kundenid angeben. Der Benutzername kann sich jederzeit ändern.
Hier ist das verbesserte Schema.
1. Tabellennamen und Feldnamen klein schreiben
2. Keine Umlaute
3. IDs
CREATE table `kunstler` (
id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
vorname VARCHAR(255) NOT NULL,
nachname VARCHAR(255) NOT NULL
) DEFAULT CHARSET=utf8;
INSERT INTO `kunstler` (id, vorname, nachname)
VALUES
(123456, "Manuela", "Kant"),
(112233, "Johann", "Fichte"),
(145678, "Eduard", "Spinoza");
CREATE table `kunde` (
id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
benutzername VARCHAR(255) NOT NULL,
vorname VARCHAR(255) NOT NULL,
nachname VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL
) DEFAULT CHARSET=utf8;
INSERT INTO `kunde` (id, benutzername, vorname, nachname, email)
VALUES
(1, "Bernd", "Bernhard", "Krause", "bk@dk.de"),
(2, "B3rnd", "Benno", "Brause", "bb@dk.de"),
(3, "Bernd32", "Bernd", "Pause", "bp@dk.de");
CREATE table `bild` (
id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) DEFAULT NULL,
beschreibung VARCHAR(255) DEFAULT NULL,
preis decimal(10,2) DEFAULT NULL,
kunstlerid int(10) DEFAULT NULL
) DEFAULT CHARSET=utf8;
INSERT INTO `bild` (id, name, beschreibung, preis, kunstlerid)
VALUES
(11, "Sonne", "Die Sonne", 50, 112233),
(23, "Mond", "Der Mond", 500, 145678),
(29, "Sterne", "Die Sterne", 200, 112233);
CREATE table `abdruck` (
id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
grosse VARCHAR(20) NOT NULL,
bildid int(10) NOT NULL,
kundenid int(10) NOT NULL
);
INSERT INTO `abdruck` (id, grosse, bildid, kundenid)
VALUES
(100, "A3", 11, 1), #id1 = B3rnd
(101, "A2", 29, 3), #id2 = Bernd32
(102, "A3", 29, 2); # id3 = B3rnd
Hoffe, das beantwortet die Fragen.