Mysql 连接两个独立表中的两列,并使用SQL将其插入数据库

Mysql 连接两个独立表中的两列,并使用SQL将其插入数据库,mysql,sql,ruby-on-rails,activerecord,Mysql,Sql,Ruby On Rails,Activerecord,我有一个rails应用程序,目前正在迁移db 以前他们有两个表:用户和公司 在用户内部有一个子域条目,在公司内部有一个域名条目 我创建了一个名为sites的新表,现在尝试使用一个名为site\u name的列,即subdomain.domain\u name 我知道如何只用Ruby就可以做到这一点,但转换所有用户的速度会非常慢 我能做些什么吗 executeUPDATE sites s SET s.site_name=从用户id=s.user_id+的用户中选择子域。+从用户id=s.user

我有一个rails应用程序,目前正在迁移db

以前他们有两个表:用户和公司

在用户内部有一个子域条目,在公司内部有一个域名条目

我创建了一个名为sites的新表,现在尝试使用一个名为site\u name的列,即subdomain.domain\u name

我知道如何只用Ruby就可以做到这一点,但转换所有用户的速度会非常慢

我能做些什么吗

executeUPDATE sites s SET s.site_name=从用户id=s.user_id+的用户中选择子域。+从用户id=s.user_id的公司中选择域名

编辑:

这是最新的问题

我现在有一张额外的桌子

users
  |_ id
  |_ email
  |_ sub_domain

companies
  |_ id
  |_ domain_name

sites
  |_ id
  |_ site_name

user_sites
  |_ id
  |_ user_id
  |_ site_id
sites是我正在创建并希望将整个域迁移到的新表。我在创建通过user_sites表的联接时遇到问题。以下是我大致得出的不成功的结论

UPDATE
  sites s
INNER JOIN user_sites us ON s.id=us.site_id
INNER JOIN (
  SELECT a.id, concat(a.sub_domain, '.', b.domain_name) site_address
FROM
  users as a
INNER JOIN companies as b ON a.company_id=b.id ) t ON t.id=us.user_id
SET
  s.site_name = t.site_address
编辑2:

我的部分问题是我试图使用UPDATE创建新行

以下是我从用户和公司表中移动数据的方法:

我首先在用户站点中创建行,将用户id添加到每个用户站点

INSERT INTO user_sites (user_id) SELECT id FROM users;
然后我在站点中创建尽可能多的用户行

INSERT INTO sites (domain_name) SELECT id FROM users;
之后,我在user\u sites中设置了site\u id

UPDATE user_sites us
INNER JOIN users u ON us.user_id=u.id
INNER JOIN sites s ON s.domain_name=u.id
SET site_id=s.id WHERE us.user_id=u.id
现在,失败的部分是用concat域名更新域名

UPDATE sites s
    INNER JOIN
    user_sites us ON s.id=us.site_id
    INNER JOIN (
    SELECT a.id, concat(a.wp_username, '.', b.domain_name) site_address
    FROM users as a
    INNER JOIN
    white_labels as b ON a.white_label_id=b.id
    ) t ON t.id = us.user_id
    SET domain_name=site_address

除最后一个域部分外,所有功能都正常工作。当我检查时,这些域都是零。

在mysql中,您可以使用基于select for tables JONED的表连接更新

    UPDATE sites s
    INNER JOIN ( 
    select a.user_id, concat(a.sub_domain, '.', b.domain_name) united_name
    FROM users as a
    INNER JOIN companies as b on a.user_id= b.user_id ) t on t.user_id = s.user_id 
    SET s.site_name  = t.united_name  

这个问题现在需要一个联接表。我试图使用您的逻辑添加一个额外的内部联接来解释它,但没有成功。我更新了问题,使我想做的更清楚。你说的不成功是什么意思。。你有错误吗?错误的后果没有结果?使用我结束问题的SQL,它将运行我正在rails迁移文件中运行它,但它返回nil,实际上似乎没有任何作用。您的查询似乎是正确的。。因此,请尝试检查用于测试的数据。。最终更新了你的问题。如果用户和公司表已填充,但用户站点和站点表是全新的。这是否会为sites表中的每个新站点名称创建一个新条目?我忙于移动数据,以至于忽略了一个事实,即一个表是空的。