1

クエリを使用して、2 つの異なるテーブルからテーブルを作成しています。

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))

ここで構文エラーは何ですか?

post_data

----
    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       

user_record


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 の後に使用しないでください。これにより、構文エラーが発生します。同じことが、CHARSET などの他の CREATE TABLE オプションにも当てはまります。

ただし、次のような構文を使用してキーを選択できます。

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 に答える