-1

我正在尝试MySQLSELECT声明中创建一个新的:

   CREATE TABLE site_database AS(SELECT database_id, name, description, site_id FROM sitematrix_databases INNER JOIN site
    matrix_site_databases ON sitematrix_site_databases.database_id = sitematrix_data
    bases.database_id);

当我执行SELECT语句时,我得到:

+-------------+--------+-------------+-------------+---------+
| database_id | name   | description | database_id | site_id |
+-------------+--------+-------------+-------------+---------+
|           5 | tc2007 |             |           5 |       1 |
|           5 | tc2007 |             |           5 |       8 |
|           5 | tc2007 |             |           5 |       9 |
|           5 | tc2007 |             |           5 |      12 |
|           5 | tc2007 |             |           5 |      14 |
+-------------+--------+-------------+-------------+---------+

但是,当我尝试创建表时,我得到:

ERROR 1052 (23000): Column 'database_id' in field list is ambiguous

我怎么解决这个问题?

4

2 回答 2

1

在您的选择语句中,确保您指定数据库 id 来自哪个表:

CREATE TABLE site_database AS(SELECT sitematrix_site_databases.database_id, name, description, site_id FROM sitematrix_databases INNER JOIN site
    matrix_site_databases ON sitematrix_site_databases.database_id = sitematrix_data
    bases.database_id);

会工作,当多个表具有相同的字段名称时,mysql 需要这个。

您可以将其简化为:

CREATE TABLE site_database AS(SELECT ssd.database_id, name, description, site_id 
FROM sitematrix_databases as sd 
INNER JOIN sitematrix_site_databases as ssd 
ON ssd.database_id = sd.database_id)
于 2012-08-08T23:27:00.023 回答
0

尝试将查询更改为:

CREATE TABLE site_database AS(SELECT sitematrix_site_databases.database_id, name, description, site_id FROM sitematrix_databases  INNER JOIN site 
    matrix_site_databases ON sitematrix_site_databases.database_id = sitematrix_data
    bases.database_id);

由于字段 database_id 出现在两个表sitematrix_databases中:因此site存在歧义

于 2012-08-08T23:26:08.707 回答