2016-06-09 226 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) 
); 

與我一起,我對MySQL還是比較陌生。這是針對IT201課程的一個項目。這個問題,一個字一個字,就是:MySQL - 更新表格並從其他表格插入數據

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.)

我做這樣的東西沒有問題,我真的很喜歡這個語言之前,但我似乎無法找出什麼我做錯了。我試過每次迭代的UPDATE我都能想到,我甚至嘗試了一些INSERT命令,加入表格......我只是不知道。這裏是我的最新嘗試的一個樣本:

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

很顯然,我還沒有列入或者從表組成的數據INSERT語句,我覺得這是無關這個問題。只要理解table.music中有大約1000行的值,table.albumList中的值大約是200。

這個想法是,albumList是一個獨特的專輯名稱表,而音樂有許多重複。我正在嘗試更新music.albumID以對應於albumList.ID_num。我覺得這不是用JOIN或外鍵/引用完成的,因爲下一個問題是添加一個引用這些的外鍵。所以我認爲這可以在UPDATE和嵌套SELECTS之前完成,就像問題提示的那樣。

+0

您的更新將無法正常工作。該子選擇將返回多行數據,並且不能將('=')結果SET分配給單個字段。您需要查看update的'join'語法... –

+0

您需要在更新語句中進行連接。像更新音樂設置music.albumID = AL.ID_num從音樂內部加入albumList AL上AL.al​​bumName = music.songalbum(因爲這是作業,我沒有給你確切的查詢,只是一個想法) –

+0

我很欣賞這個,這絕對是家庭作業,我喜歡指導老師(和你)沒有給出確切的答案。我早些時候嘗試了JOIN,但沒有奏效,但感謝您讓我走上了正確的道路。 :) 也感謝編輯格式@Barranka – KocLobster

回答

0

雖然我假設music上的歌曲包含與albumList上的albumname相同的數據(這可能不正確,因爲字段大小不同),但以下SQL應該有所幫助。它設置在musicalbumIDalbumListID_Num其中songalbum匹配albumName

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

我嘗試了一些非常類似於此的內容,但每當在UPDATE命令下的select語句內使用JOIN命令時,我總是會收到錯誤。 錯誤:#1093 - 您不能指定目標表 '音樂' 的更新在FROM子句 '更新音樂 SET ALBUMID =(SELECT albumList.ID_Num FROM albumList JOIN音樂music.songalbum = albumList.albumName) ' 這確實讓我意識到我有一個大腦放屁,並且做錯了以前的嘗試。我沒有確定歌名匹配albumName,就像一個白癡。 – KocLobster

0

我相信,在你的球員的幫助,我解決了這個答案。我並不需要一個JOIN語句,正如我一直認爲的那樣。這項任務今天中午(10分鐘)到期,我的筆記本電腦上的電池已經非常接近死亡,所以我沒有太多時間來確認我的答案是我想要的,但粗略的檢查證實我得到了正確答案(以及問題提示答案是)。我以爲我會發布它爲任何其他人想要搜索SOF的未來:

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