INSERT有两个SELECT语句

时间:2013-02-14 03:46:16

标签: php mysql

这是我目前正在尝试但我收到的mySQL错误:

mysql_query ("INSERT INTO profile_tag (profile_id, tag_id) 
(SELECT profile_id FROM profile WHERE username = '$username'), 
(SELECT tag_id FROM  tag WHERE  tag = '$music' OR tag = '$sports' OR tag = '$tech')"); 

我可以使用单个INSERT语句完成SELECT,但不能两个。

我收到的错误:

  

查询无效:您的SQL语法出错;查看与MySQL服务器版本对应的手册,以便在第1行'(SELECT tag_id FROM tag WHERE tag = '' OR tag = 'sports' OR tag = '')'附近使用正确的语法

3 个答案:

答案 0 :(得分:3)

就像错误所说的那样,语法不正确。 insert的值必须与列定义中的值数相匹配。

INSERT INTO profile_tag (profile_id, tag_id)
SELECT
    profile_id, tag_id
FROM
    profile
    CROSS JOIN tag
WHERE
    username = ?
    AND tag IN (?, ?, ?)

请注意,如果为每个输入找到tag值,则会插入多个行,但我相信这就是您想要的。

答案 1 :(得分:1)

您可以使用VALUES子句

insert into profile_tag(user_id, tag_id) values
((select id from users where username = 'alice'),
 (select id from tags where tag = 'music'));

http://sqlfiddle.com/#!2/76439/1/0

答案 2 :(得分:0)

mysql_query ("INSERT INTO profile_tag (profile_id, tag_id) 
(SELECT profile.profile_id, tag.tag_id FROM profile LEFT JOIN tag ON 1 WHERE profile.username = '$username' AND tag.tag IN ('$music', '$sports', '$tech'))");