连接两个列,由两个独立的表,并使用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
现在的问题需要一个连接表。我试图用你的逻辑来添加一个额外的内部连接来解释它,但我没有成功。我更新了这个问题,使我想要做的更清楚。 –
你是什么意思为“不成功”..你有错误?错误?结果?没有结果 ? – scaisEdge
随着SQL我结束了这个问题,它将运行(我正在运行它在一个rails迁移文件中),但它返回零,并且实际上并没有做任何事情。 –