我有两个表
virtual_domains
virtual_users。
virtual_domains有我的电子邮件服务器的有效域列表,示例数据:
ID Name 1 example.org 2 example.com 3 example.netvirtual_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这将把kurt@example.net作为电子邮件用户添加到第5行。databasename
.virtual_users
(id
,domain_id
,password
,
我希望能够做到的不是放入' 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。
答案 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中对此进行过测试,但我认为它应该适用于大多数数据库。