连接两个列,由两个独立的表,并使用SQL

问题描述:

插入分贝我有我目前正在迁移一个数据库中的Rails应用程序。连接两个列,由两个独立的表,并使用SQL

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

内的用户有一个子项,公司内部有一个DOMAIN_NAME条目。

我创建了一个新的表名为网站,我现在想有一列名为SITE_NAME是subdomain.domain_name。

我知道如何只用红宝石做到这一点,但它会转换成所有用户的很慢。

我是否可以这样做:

execute("UPDATE sites s SET s.site_name=(SELECT sub_domain FROM users WHERE user_id=s.user_id) + '.' + (SELECT domain_name FROM companies WHERE user_id=s.user_id)")

编辑:

这里是更新的问题。

我现在有一个额外的表。

users 
    |_ id 
    |_ email 
    |_ sub_domain 

companies 
    |_ id 
    |_ domain_name 

sites 
    |_ id 
    |_ site_name 

user_sites 
    |_ id 
    |_ user_id 
    |_ site_id 

网站是我创建并希望将完整域迁移到的新表。我无法创建通过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语句,创建新行。

这里是我迈出来自用户和公司表中移动数据的方法:

我开始通过创建user_sites行通过添加USER_ID每user_site

INSERT INTO user_sites (user_id) SELECT id FROM users; 

然后,我为创建在站点多的行,也有网友

INSERT INTO sites (domain_name) SELECT id FROM users; 

后来我设置user_sites的SITE_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中,你可以使用基于选择的表的表加入了一个更新加入

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 
+0

现在的问题需要一个连接表。我试图用你的逻辑来添加一个额外的内部连接来解释它,但我没有成功。我更新了这个问题,使我想要做的更清楚。 –

+0

你是什么意思为“不成功”..你有错误?错误?结果?没有结果 ? – scaisEdge

+0

随着SQL我结束了这个问题,它将运行(我正在运行它在一个rails迁移文件中),但它返回零,并且实际上并没有做任何事情。 –