如何将RowID放入INSERT INTO语句中

时间:2014-06-01 09:52:17

标签: sql

我有两个表
virtual_domains
virtual_users。

virtual_domains有我的电子邮件服务器的有效域列表,示例数据:
    

    ID         Name
    1          example.org
    2          example.com
    3          example.net
    
virtual_users保留每个域的有效电子邮件地址,并将它们链接到它们所属的域,示例数据:
    
    id         domain_id          password           email address
    1          1                 some               jack@example.org
    2          1                 thing              john@example.org
    3          3                 goes               annete@example.net
    4          2                 here               bilbo@example.com
    
因此,要插入新用户,我使用此语法(auto_increment用于id列):     
INSERT INTO databasename.virtual_users (
    id, 
    domain_id, 
    password, 
    email ) 
    VALUES (
    DEFAULT, 
    '3', 
    MD5('somepassword'), 
    'kurt@example.net');
    
这将把kurt@example.net作为电子邮件用户添加到第5行。

我希望能够做到的不是放入' 3'对于域ID,在那里添加一些其他语法以从相关域的virtual_domains表返回id,即:

INSERT INTO `databasename`.`virtual_users` ( 
`id`, 
`domain_id`, 
`password`, 
`email` ) 
VALUES (
DEFAULT, 
*ADD_QUERY_HERE_TO_GET_DOMIAN_ID_VALUE_FROM_virtual_domains_TABLE*, 
MD5('somepassword'), 
'kurt@example.net' );

这样它就可以在一个命令中完成,而不必在单独的查询中查找domain_id。

1 个答案:

答案 0 :(得分:1)

您可以在INSERT语句中使用子查询。

 INSERT INTO databasename.virtual_users (
     id, 
     domain_id, 
     password, 
     email
 ) 
     VALUES (
     DEFAULT, 
     ( SELECT ID FROM databasename.virtual_domains WHERE Name = 'example.net' ), 
     MD5('somepassword'), 
     'kurt@example.net'
 );

我只在SQL Server中对此进行过测试,但我认为它应该适用于大多数数据库。