MySQL CONCAT 找不到带有别名的 table
MySQL CONCAT not finding table with alias
我有一个相当直接的查询,我不明白为什么 CONCAT
不起作用。
我是 JOINING
表 domains
client_content
和 domain_status
并试图 insert into
vhosts
。在我使用 CONCAT
组合 domain_status.status_directory
和 client_configuration.user_file
之前,所有工作都按预期进行。此时我分配的别名是否超出范围?
----------------------------------------
domains | domain | enabled | status |
----------------------------------------
-------------------------------------
client_configuration | contractor_id | user_file |
-------------------------------------
---------------------------------
domain_status | id | status_directory |
---------------------------------
------------------------------------------------------------
vhosts | site_name | directory | enabled | status |
------------------------------------------------------------
INSERT INTO vhosts (`site_name`, `directory`, `enabled`, `status`)
SELECT d.domain, CONCAT(`s.status_directory`,'/',`c.user_file`), d.enabled, d.status
FROM domains d
LEFT JOIN client_configuration c
ON d.contractor_id = c.contractor_id
LEFT JOIN domains_status s
ON d.status = s.id
WHERE d.domain = 'example.com';
据我了解,我应该能够以这种方式使用 CONCAT
,但我收到 MySQL 错误:
Error Code: 1054. Unknown column 's.status_directory' in 'field list'
如果我不能像这样使用 CONCAT
.. 有什么解决方法?
问题是您用与列名相同的反引号将 table 别名括起来。从这些引号中取出 table 别名。试试这个:
INSERT INTO vhosts
(
`site_name`,
`directory`,
`enabled`,
`status`
)
SELECT
d.domain,
CONCAT(s.`status_directory`,'/', c.`user_file`),
d.enabled,
d.status
FROM domains d
LEFT JOIN client_configuration c
ON d.contractor_id = c.contractor_id
LEFT JOIN domains_status s
ON d.status = s.id
WHERE d.domain = 'example.com';
删除引号:INSERT INTO vhosts (site_name, directory, enabled, status)
SELECT d.domain, CONCAT(s.status_directory,'/',c.user_file) as statusUserFile, d.enabled, d.status
FROM domains d LEFT JOIN client_configuration c
ON d.contractor_id = c.contractor_id
LEFT JOIN domains_status s
ON d.status = s.id
WHERE d.domain = 'example.com';
我有一个相当直接的查询,我不明白为什么 CONCAT
不起作用。
我是 JOINING
表 domains
client_content
和 domain_status
并试图 insert into
vhosts
。在我使用 CONCAT
组合 domain_status.status_directory
和 client_configuration.user_file
之前,所有工作都按预期进行。此时我分配的别名是否超出范围?
----------------------------------------
domains | domain | enabled | status |
----------------------------------------
-------------------------------------
client_configuration | contractor_id | user_file |
-------------------------------------
---------------------------------
domain_status | id | status_directory |
---------------------------------
------------------------------------------------------------
vhosts | site_name | directory | enabled | status |
------------------------------------------------------------
INSERT INTO vhosts (`site_name`, `directory`, `enabled`, `status`)
SELECT d.domain, CONCAT(`s.status_directory`,'/',`c.user_file`), d.enabled, d.status
FROM domains d
LEFT JOIN client_configuration c
ON d.contractor_id = c.contractor_id
LEFT JOIN domains_status s
ON d.status = s.id
WHERE d.domain = 'example.com';
据我了解,我应该能够以这种方式使用 CONCAT
,但我收到 MySQL 错误:
Error Code: 1054. Unknown column 's.status_directory' in 'field list'
如果我不能像这样使用 CONCAT
.. 有什么解决方法?
问题是您用与列名相同的反引号将 table 别名括起来。从这些引号中取出 table 别名。试试这个:
INSERT INTO vhosts
(
`site_name`,
`directory`,
`enabled`,
`status`
)
SELECT
d.domain,
CONCAT(s.`status_directory`,'/', c.`user_file`),
d.enabled,
d.status
FROM domains d
LEFT JOIN client_configuration c
ON d.contractor_id = c.contractor_id
LEFT JOIN domains_status s
ON d.status = s.id
WHERE d.domain = 'example.com';
删除引号:INSERT INTO vhosts (site_name, directory, enabled, status)
SELECT d.domain, CONCAT(s.status_directory,'/',c.user_file) as statusUserFile, d.enabled, d.status
FROM domains d LEFT JOIN client_configuration c
ON d.contractor_id = c.contractor_id
LEFT JOIN domains_status s
ON d.status = s.id
WHERE d.domain = 'example.com';