2012-09-26 102 views
-1

我遇到以下问题:更新MySQL语句

我试图在Comp中添加每个学生。科学。部成当然,这里是的DDL关系:

所需当然具有值( '小样科学' 'CS-001', '每周研讨会',,0)


Department 
     (dept_name [primary key], building, budget) 

Course 
     (course_id [primary key], title, dept_name, credits) 

Instructor 
     (ID [primary key], name, dept_name, salary) 
     Foreign Key is dept_name references Department 

Section 
     (course_id [primary key], sec_id [primary key], semester [primary key], year [primary key], building, room_number, time_slot_id) 
     Foreign Key course_id references Course 

Teaches 
     (ID [primary key], course_id [primary key], sec_id [primary key], semester [primary key], year [primary key]) 
     Foreign key ID references Instructor, 
Foreign Key (course_id,sec_id,semester,year) references Section 

Takes 
     (ID [primary key], course_id [primary key], sec_id [primary key], semester [primary key], year [primary key], grade) 
     Foreign key(course_id,sec_id,semester,year) references section Foreign key(ID) references student 

Student 
     (ID [primary key], name, dept_name, tot_cred) Foreign key(dept_name) references department 

的问题是,我得到尝试使用更新语句(错误是1241 Operand should have 1 column),纠正我的语法,因为它更可能的问题,当一个错误:

update takes 
set ID=ID, course_id='CS-001', sec_id='1', semester='Fall', year=2009, grade=null 
where 
(
select distinct name, ID 
from student natural join takes 
where dept_name='Comp. Sci.' 
); 

对不起,我新的MySQL,如果你可以引导我纠正我的语法,甚至可能比我的解决方案更好(不知道我的解决方案是否是我的解决方案)。

+0

你想更新什么表? –

+0

你得到什么错误?为了将来的参考,如果你发现自己说“我得到一个错误”,请继续并包含错误。 –

+0

我正在尝试更新'take'表 –

回答

1

您没有在您指定的列WHERE条款这就是为什么你越来越Error 1241 Operand should contain 1 column(s)

update takes 
set ID=ID, course_id='CS-001', sec_id='1', semester='Fall', year=2009, grade=null 
where 
(
    select distinct name, ID 
    from student natural join takes 
    where dept_name='Comp. Sci.' 
); 

另外,加入这两个表

UPDATE takes a 
     INNER JOIN student b 
      ON a.ID = b.ID 
SET  a.ID = ID, 
     a.course_id='CS-001', 
     a.sec_id='1', 
     a.semester='Fall', 
     a.`year` = 2009, 
     a.grade = 0  -- you can't set NULL value when updating a column 
WHERE b.dept_name = 'Comp. Sci.' 
+0

你会如何在'takes'和'students'中获得ID主键的重复条目? –

+0

你还有意更新记录吗? –

+0

当我尝试使用您提供的解决方案时,我得到一个错误1064:复制条目'重复的条目',用于键'PRIMARY'...在这个例子中是ID主键。 –

1

我不知道takes表的样子,但假设你正确地分配它,你的WHERE语句不提供比较操作。 WHERE需要为任何给定的返回行导致真或假结果。因此,您需要在初始查询中加入student,并使用何处比较结果。

您的问题缺少有关takesstudent表的信息,因此无法正确重写您的查询。

+0

更新显示需要和学生关系 –

+0

John Woo的权利。 – joshstrike