在MySQL中,基于选择的其中一列进行插入操作是否可行?

9
在MySQL中,是否可以根据某一列的选择进行插入操作?
INSERT INTO student_fees(id, name, fees) 
VALUES(1, SELECT name from students where student_id = 1, 200$) 

如果是的话,一个例子会非常有帮助。
-谢谢

MySQL手册明确说明这是可能的。但是你的语法是错误的。 - Jocelyn
3个回答

12

尝试使用 INSERT...SELECT 语句

INSERT INTO student_fees(id, name, fees) 
SELECT ... -- put here the SELECT STATEMENT with condition
如果您的列 ID自动递增 的,您就不必指定 1,否则会导致错误。
INSERT INTO student_fees(name, fees) 
SELECT `name`, '200$' 
FROM students         -- this will select all students on the table
                      -- and add $200 on thier fees.

另一个要注意的是,如果你只想从student表格中插入一列数据,你需要指定条件,以避免约束错误(假设你的列ID是主键)。

INSERT INTO student_fees(name, fees) 
SELECT `name`, '200$' 
FROM   students
WHERE  columnName = 'blahBlah'

更新1

看到您的评论,您有这个查询

INSERT INTO coupon_allotment (page_id, offer_id, coupon_code, user_id) 
SELECT page_id, 4, 'ABC'        -- number of columns mismatch, right?
FROM pages_discounts_association 
WHERE discount_id = 4

您需要删除上面的user_id列,或者在选择语句中添加ID以匹配列数。


请帮我纠正以下的查询语句:INSERT INTO coupon_allotment(page_id, offer_id, coupon_code, user_id) SELECT page_id, 4, 'ABC' FROM pages_discounts_association WHERE discount_id = 4。 - Abhishek Dhote
列数不匹配。我刚刚更新了我的查询...看看现在是否可以工作。 - John Woo

3
只需使用常规的INSERT INTO ... SELECT语法,并将其他字段选择为以下常量:
INSERT INTO student_fees(id, name, fees) 
SELECT 1, `name`, '200$' FROM students

以下是实际查询:INSERT INTO coupon_allotment(page_id, offer_id, coupon_code, user_id) SELECT page_id, 4, 'ABC' FROM pages_discounts_association WHERE discount_id = 4。无法工作。 - Abhishek Dhote
@Abhishek,你的实际查询表有4列(page_id、offer_id、coupon_code、user_id),而在SELECT中只有3列。为了使此查询有效,你必须在SELECT中拥有与INSERT语句中相同数量的列! - Sirko
@Abhishek:在 VALUES(...)SELECT 中必须具有相同数量的字段。 在您的情况下:4个字段,然后是3个字段。 - Jocelyn

2

试试这个:

INSERT INTO student_fees(id, name, fees) 
Select 1, name,'200$' from students 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接