从另一个表中选择一列的值,并显式提供其他值

时间:2012-10-21 17:21:52

标签: mysql sql select phpmyadmin insert-into

我有两张桌子:

cities(city_id|Serial, city_name|Text, state_id|Integer)
states(state_id|Serial, state_name|Text)

我想在cities中插入一行city_name作为“PortBlair”,并在state_id states中插入state_name="Andaman"

我的查询

INSERT INTO cities (city_name,state_id) 
VALUES ('PortBlair',select state_id from states where state_name='Andaman')

MySQL中的错误

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select state_id from states where state_name='Andaman')' at line 1

问题1 :这句话有什么问题?我错过了一些qoutes / backquotes /撇号吗?

问题2 :如果插入语句的顺序相同,它是否总是依赖于Serial数据类型,它总是生成相同的Id?我的意思是,我应该把state_id自己写成:

INSERT INTO cities (city_name,state_id) VALUES ('PortBlair',1)

2 个答案:

答案 0 :(得分:1)

你需要用括号括起select语句作为你的值,

INSERT INTO cities (city_name,state_id) 
VALUES ('PortBlair', (select state_id from states where state_name='Andaman'))

但最好使用INSERT INTO...SELECT声明

INSERT INTO cities (city_name,state_id) 
SELECT 'PortBlair' as city_name, state_id
FROM states 
WHERE state_name = 'Andaman'

答案 1 :(得分:0)

Q1:

INSERT INTO cities (city_name,state_id) 
select 'PortBlair' as city, state_id 
from states where state_name='Andaman'

Q2:

是的,你可以自己编写state_id:

INSERT INTO cities (city_name,state_id) VALUES ('PortBlair',1)