【问题标题】:mysql insert with value, with selected data from another tablemysql插入值,从另一个表中选择数据
【发布时间】:2018-02-03 04:35:01
【问题描述】:

我有一个无法解决的 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";

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

【问题讨论】:

  • 如果我理解正确,那么您使用了 INSERT INTO valias,其中“valias”不是任何表格。所以我认为你不能使用它。插入语句必须有表名或视图名。

标签: mysql sql insert where


【解决方案1】:

我的经验主要是在 MS SQL Server 中,但我认为在 MySQL 中应该也是如此:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      试试这个,

      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";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-28
        • 2014-02-17
        • 1970-01-01
        • 2013-05-25
        • 1970-01-01
        • 2013-04-25
        • 1970-01-01
        相关资源
        最近更新 更多