mysql插入值,包含来自另一个表的选定数据

时间:2013-07-20 16:18:13

标签: mysql sql insert where

我有一个我无法解决的MySQL问题。我有一个mysql来管理虚拟用户dovecot安装,它使用两个表(一个用于别名,另一个用于域)。

表别名包含以下字段:domain_id(INT),source(VARCHAR),destination(VARCHAR),而表域只有两个字段:id(INT AUTO INC)和name(VARCHAR)。

虽然我可以通过发出以下命令来选择属于给定域的别名:

SELECT valias.* FROM aliases AS valias
JOIN domains AS vdomains ON valias.domain_id=vdomains.id 
WHERE vdomains.name = "domain_name";

我无法开始插入新的别名,指定域名。像这样的东西:

INSERT INTO valias(domain_id, source, destination) 
    VALUES (id, 'canto', 'george') 
    SELECT id FROM aliases 
    JOIN domains AS vdomains ON aliases.domain_id=vdomains.id 
    WHERE  vdomains.name =     "domain_name";

有人知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

我的经验主要是在MS SQL Server中,但我认为它应该在MySQL中采用相同的方式:

INSERT INTO valias(domain_id, source, destination)  
SELECT id, 'canto', 'george' FROM vdomains
WHERE  name = 'domain_name';

答案 1 :(得分:0)

要么我在这里遗漏了一些东西,要么你的查询似乎有点过分了。怎么样:

INSERT INTO aliases(domain_id, source, destination) 
    VALUES (id, 'canto', 'george')
    JOIN domains ON domains.id = aliases.domain_id
    WHERE domains.name = 'domain name'  

答案 2 :(得分:0)

试试这个,

INSERT INTO valias(domain_id, source, destination) 
SELECT id,'canto', 'george' 
FROM aliases 
    JOIN domains AS vdomains 
        ON aliases.domain_id=vdomains.id 
WHERE  vdomains.name =     "domain_name";