web-dev-qa-db-ja.com

MySQLの特定のパーティションからレコードを選択できませんか?

次のクエリを使用してテーブルを作成しました。

CREATE TABLE employees  (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    fname VARCHAR(25) NOT NULL,
    lname VARCHAR(25) NOT NULL,
    store_id INT NOT NULL,
    department_id INT NOT NULL
)   
    PARTITION BY RANGE(id)  (
        PARTITION p0 VALUES LESS THAN (5),
        PARTITION p1 VALUES LESS THAN (10),
        PARTITION p2 VALUES LESS THAN (15),
        PARTITION p3 VALUES LESS THAN MAXVALUE
);

次に、パーティション情報とクエリを使用して、次のようにデータをテーブルに挿入しました。

INSERT INTO employees VALUES
    ('', 'Bob', 'Taylor', 3, 2), ('', 'Frank', 'Williams', 1, 2), 
    ('', 'Ellen', 'Johnson', 3, 4), ('', 'Jim', 'Smith', 2, 4),  
    ('', 'Mary', 'Jones', 1, 1), ('', 'Linda', 'Black', 2, 3),
    ('', 'Ed', 'Jones', 2, 1), ('', 'June', 'Wilson', 3, 1), 
    ('', 'Andy', 'Smith', 1, 3), ('', 'Lou', 'Waters', 2, 4),  
    ('', 'Jill', 'Stone', 1, 4), ('', 'Roger', 'White', 3, 2),
    ('', 'Howard', 'Andrews', 1, 2), ('', 'Fred', 'Goldberg', 3, 3), 
    ('', 'Barbara', 'Brown', 2, 3), ('', 'Alice', 'Rogers', 2, 2),  
    ('', 'Mark', 'Morgan', 3, 3), ('', 'Karen', 'Cole', 3, 2);

今、私は特定のパーティションからレコードを選択しようとしています、そして私のクエリは、

SELECT * FROM employees PARTITION (p1);

しかし、私は同じエラーが発生し続けます、

1064-SQL構文にエラーがあります。 1行目の '(p1)LIMIT 0、30'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください

ちなみに、最初はInnoDBデータベースエンジンを使用していましたが、現在はMyISAMに変更しましたが、何の助けにもなりませんでした。

1
Vijin Paulraj

提案している構文(パーティションリストから明示的に選択できる)は、MySQL 5.6.2まで存在しません。

MySQL 5.6.2以降では、SELECTはパーティションまたはサブパーティション(またはその両方)のリストでPARTITIONキーワードを使用した明示的なパーティション選択をサポートしています... [src]

そして実際、あなたの例は MySQL 5.6マニュアル から来ています。 MySQL 5.5または5.1を実行しているが、5.6は実行していないと想定しています。

4
Derek Downey