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