1

我正在使用查询从两个不同的表创建表:

create table post_table as 
  ( select t1.id, t2.url, t2.desc, t2.preview, t2.img_url, 
           t2.title, t2.hash, t2.rate 
    from user_record  t1, post_data t2 
      primary key (t1.id, t2,hash))

这里有什么语法错误?

发布数据

----
    url varchar(255)    No           
        desc    varchar(2048)   No           
        preview varchar(255)    No           
        img_url varchar(128)    No           
        title   varchar(128)    No           
        hash    varchar(128)    No       // This is one  
        rate    varchar(20) Yes     NULL       

用户记录


id  varchar(40) No           //This is 2nd
name    varchar(50) Yes     NULL         
email   varchar(50) Yes     NULL         
picture varchar(50) No           

更新:

create table post_table (
    id VARCHAR(40), url varchar(255),  preview varchar(255) , img_url varchar(128), title varchar(128), hash varchar(128), rate varchar(20)
        primary key (t1.id, t2,hash));

select t1.id, t2.url, t2.desc, t2.preview, t2.img_url, 
t2.title, t2.hash, t2.rate 
from user_record  t1, post_data t2;
4

2 回答 2

1

格式化CREATE TABLE语句,以便我们可以看到( )配对:

create table post_table as ( 
    select t1.id, t2.url, t2.desc, t2.preview, t2.img_url, t2.title, t2.hash, t2.rate 
    from user_record  t1, post_data t2 
    primary key (t1.id, t2,hash)
)

我们可以看到主键被附加到 select 语句中。

CREATE TABLE除此之外,关于可以在语句中使用的一般语法还有特定的限制CREATE TABLE ... SELECT

来自:http ://dev.mysql.com/doc/refman/5.1/en/create-table-select.html

ENGINE 选项是 CREATE TABLE 语句的一部分,不应在 SELECT 之后使用;这将导致语法错误。对于其他 CREATE TABLE 选项(例如 CHARSET)也是如此。

您可以使用类似于以下的语法来选择键:

mysql> CREATE TABLE test (a INT NOT NULL AUTO_INCREMENT,
    ->        PRIMARY KEY (a), KEY(b))
    ->        ENGINE=MyISAM SELECT b,c FROM test2;

因此,使用您的查询重新处理它以首先定义列类型,然后是键,最后是 select 语句。我们不知道您的数据类型,但它看起来类似于:

create table post_table (
    id DATATYPE, url DATATYPE, desc DATATYPE...
    primary key (t1.id, t2,hash))
)
select t1.id, t2.url, t2.desc, t2.preview, t2.img_url, 
t2.title, t2.hash, t2.rate 
from user_record  t1, post_data t2
于 2013-11-05T18:00:46.153 回答
1

您在选择之前放置了键定义。此外,您不能在没有字段的情况下进行键定义,因此如果您需要键,则已放置所有表结构。

http://dev.mysql.com/doc/refman/5.1/en/create-table.html

另一种方法是使用 CREATE INDEX 创建表后创建索引

于 2013-11-05T18:03:32.893 回答