2016-06-09 20 views
0
CREATE TABLE IF NOT EXISTS music 
(
songname varchar(98) DEFAULT NULL, 
songartist varchar(29) DEFAULT NULL, 
songalbum varchar(60) DEFAULT NULL, 
albumID  INT, 
songlength decimal(6,2) DEFAULT NULL, 
songgenre varchar(18) DEFAULT NULL, 
songyear int DEFAULT NULL, 
songplays INT DEFAULT NULL 
); 

CREATE TABLE IF NOT EXISTS albumList 
(
    ID_num INT NOT NULL AUTO_INCREMENT, 
    albumName VARCHAR(30), 
    PRIMARY KEY (ID_num) 
); 

Bare mit mir, ich bin immer noch ziemlich neu in MySQL. Dies ist für ein Projekt in meiner IT201-Klasse. Die Frage, Wort für Wort, ist:MySQL - Aktualisieren einer Tabelle und Einfügen von Daten aus einer anderen Tabelle

Update the music table to set the albumID number to the corresponding album ID number from the new album table. (Hint: use a nested select statement.)

Ich habe Sachen wie dies getan, bevor überhaupt kein Problem, ich diese Sprache wirklich genießen, aber ich kann nicht scheinen, um herauszufinden, was ich falsch mache. Ich habe jede Iteration von UPDATE ausprobiert, die ich mir vorstellen kann, ich habe sogar einige INSERT-Befehle ausprobiert, die Tabellen mitgemacht. Ich weiß es einfach nicht. Hier ist ein Beispiel von einem meiner jüngsten Versuche:

UPDATE music 
SET 
music.albumID = (SELECT albumList.albumName FROM albumList) 

Offensichtlich habe ich nicht die INSERT-Anweisungen enthalten entweder aus Tabelle, die die Daten bilden, fühlte ich, es sei irrelevant für diese Frage. Verstehen Sie einfach, dass es in table.music etwa 1000 Einträge und in table.albumList etwa 200 Einträge gibt.

Die Idee ist, dass AlbumList eine Tabelle für einzigartige Albumnamen ist, während Musik viele wiederholt hat. Ich versuche, music.albumID so zu aktualisieren, dass sie der albumList.ID_num entspricht. Ich habe den Eindruck, dass dies nicht mit JOINs oder Fremdschlüsseln/Referenzierung geschieht, da die nächste Frage darin besteht, einen Fremdschlüssel hinzuzufügen, der auf diese verweist. Ich nehme also an, dass dies mit UPDATE und geschachtelten SELECTS gemacht werden kann, wie die Frage andeutet.

+0

Ihr Update nicht funktionieren. Dieser Subselect gibt MULTIPLE-Datenzeilen zurück, und Sie können einem einzelnen Feld keine Result SET zuweisen ('='). Sie müssen in die 'Join'-Syntax von update schauen ... –

+0

Sie müssen einen Join in Ihrer Update-Anweisung machen. Sowas wie update music set music.albumID = AL.ID_num von music inner join albumList AL auf AL.albumName = music.songalbum (da es sich um Hausaufgaben handelt, gebe ich dir nicht die genaue Frage, nur eine Idee) –

+0

Ich weiß das zu schätzen , das ist definitiv Hausaufgaben, ich mag, dass der Lehrer (und Sie) keine genauen Antworten geben. Ich habe einen JOIN früher versucht, aber es hat nicht funktioniert, aber danke, dass du mich auf den richtigen Weg gebracht hast. :) Auch danke für die Formatierung @Barranka – KocLobster

Antwort

0

Die folgende SQL sollte helfen, obwohl ich annehme, dass Songalbum auf music enthält die gleichen Daten wie albumname auf AlbumList (dies kann falsch sein, da die Feldgrößen unterschiedlich sind). Er setzt die albumID auf music die ID_Num von albumList zu sein, wo die songalbum die albumName Spiele

UPDATE music SET albumID = (SELECT a.ID_Num FROM albumList a 
           Join music m on m.songalbum = a.albumName) 
+0

Ich habe versucht, etwas sehr ähnliches, aber ich bekomme immer einen Fehler, wenn ich einen JOIN-Befehl innerhalb einer SELECT-Anweisung unter dem UPDATE-Befehl verwenden. Fehler: # 1093 - Sie können nicht in FROM-Klausel Zieltabelle 'Musik' für die Aktualisierung angeben 'UPDATE Musik SET ALBUMID = (SELECT albumList.ID_Num VON albumList Musik JOIN ON music.songalbum = albumList.albumName) ' Das hat mich erkennen lassen, dass ich einen Hirnfurz hatte und die vorherigen Versuche falsch machte.Ich habe nicht sichergestellt, dass das Songalbum mit dem Albumnamen übereinstimmt, wie ein Idiot. – KocLobster

0

ich mit Jungs Hilfe, ich glaube, die Antwort gelöst. Ich brauchte keine JOIN-Anweisung, wie ich immer zuerst dachte. Die Aufgabe ist heute Mittag (in 10 Minuten) fällig und die Batterie auf meinem Laptop ist fast tot. Ich hatte also nicht viel Zeit zu bestätigen, dass meine Antwort das war, was ich wollte, aber ein oberflächlicher Check bestätigt, dass ich das bekommen habe richtige Antwort (und was die Frage die Antwort anzeigt). Ich dachte, ich es für von jemandem würde sonst die SOF will in Zukunft suchen:

UPDATE music SET albumID = (SELECT albumList.ID_Num FROM albumList WHERE albumList.albumName = music.songalbum)

Verwandte Themen