从select语句mysql创建表的问题

时间:2012-08-08 23:23:50

标签: mysql

我正在尝试从MySQL语句创建新的SELECT

   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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

在select语句中,请确保指定数据库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)

答案 1 :(得分: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_databasessite因此含糊不清