2012-09-26 101 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