• ベストアンサー

初歩的な質問ですが…

今春から、SQLを勉強し始めました。 今、groupというTABLEを作ろうとしているのですが、groupの近くにsyntax errorが出てしまって困っています。 自分で考えてみたのですが、わからないので、もしおかしな点がわかるようでしたら教えてください。 CREATE TABLE group ( id int, name char(20), member_num int, contract int, PRIMARY KEY (id) );

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

「GROUP」という単語がいわゆる予約語にあたるため、エラーになっています。 GROUPというのはご存じのとおり、SELECT ... FROM ... GROUP BY ...という形でSQLの構文の中で使われますからね。 CREATE TABLE GROUP(... を CREATE TABLE [GROUP](... とすれば、テーブルを作ることはできるはずです。 ただし、出来上がったテーブルは、SELECT * FROM GROUPではエラーとなり、SELECT * FROM [GROUP]としなくてはならず、非常に使いづらいことになります。 したがって、予約語をテーブル名やフィールド名にするのはお勧めできません。

rennnyo
質問者

お礼

回答ありがとうございます。 テーブル名を変えることで、無事エラーはなくなりました。

その他の回答 (2)

  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.3

他の皆さんが指摘しているように予約語です。 予約語は以下のものがありますので、注意して作成しましょう。 http://msdn.microsoft.com/ja-jp/library/ms189822.aspx http://msdn.microsoft.com/ja-jp/library/ms189822(SQL.90).aspx

回答No.2

group が予約語なんでしょう。 変数名やテーブル名に普通の英単語を使うのは、あんまり良くありません。i_group とか、grp_a とか、何らかの命名規則を定めて命名した方が良いです。

rennnyo
質問者

お礼

回答ありがとうございます。 おかげで、エラーはなくなりました。アドバイスもありがとうございます。

関連するQ&A

  • 指定された趣味を持つメンバーがいるグループを抽出するSQL

    グループテーブル、メンバーテーブル、趣味テーブルの3つのテーブルがあります。 あるメンバーはあるグループに属しており、趣味を1つ持っています。 以下がそのSQLです。 CREATE TABLE groups ( g_id int primary key ); CREATE TABLE members ( m_id int primary key , g_id int , h_id int ); CREATE TABLE hobbies ( h_id int primary key, h_name text ); INSERT INTO groups VALUES ( 1 ); INSERT INTO groups VALUES ( 2 ); INSERT INTO groups VALUES ( 3 ); INSERT INTO members VALUES ( 1, 1, 1); INSERT INTO members VALUES ( 2, 1, 3); INSERT INTO members VALUES ( 3, 1, 4); INSERT INTO members VALUES ( 4, 1, 4); INSERT INTO members VALUES ( 5, 2, 1); INSERT INTO members VALUES ( 6, 2, 2); INSERT INTO members VALUES ( 7, 2, 3); INSERT INTO members VALUES ( 8, 3, 2); INSERT INTO members VALUES ( 9, 3, 3); INSERT INTO members VALUES ( 10, 3, 4); INSERT INTO hobbies VALUES ( 1, 'sports' ); INSERT INTO hobbies VALUES ( 2, 'music' ); INSERT INTO hobbies VALUES ( 3, 'book' ); INSERT INTO hobbies VALUES ( 4, 'drive' ); 指定された趣味を持つメンバーがいるグループを抽出するにはどうすればいいでしょうか? 例えば、「読書が趣味なメンバーとドライブが趣味なメンバーがいるグループは?」「グループ1とグループ3」のような感じです。 一応自分で考えてみたのが、以下ですが、これだと趣味の指定が増減すると大きくSQLが変わってしまいます。 もっといいやり方はないでしょうか? 私はPostgreSQL8を使ってますが、汎用的なSQLであれば、そっちの方がいいです。 SELECT distinct m.g_id FROM members m join hobbies h ON m.h_id = h.h_id where h.h_name = 'drive' INTERSECT SELECT distinct m.g_id FROM members m join hobbies h ON m.h_id = h.h_id where h.h_name = 'book';

  • SQL文でテーブル作成 Access2002

    MySQLで create table testm ( key1 char(008) primary key, data1 int8, data2 int8, data3 int8 ) type=InnoDB; という風なSQLでテーブルを作成したりしますが Accessでは無理なのでしょうか? よろしくお願いします。

  • paizaで配布中のmysqlに関する質問です

    以下のSQL文はpaizaのsql動画で配布されています。paiza.IOではエラーはでませんが、 自分のxamppで実行した際にエラーがでて、テーブルが作成できません。 何が問題なのか教えていただけますか? エラーメッセージは#1050 - Table 'jobs' already exists xamppのバージョンはv3.1.0 Beta6 です。 CREATE TABLE players ( id INT NOT NULL PRIMARY KEY, name VARCHAR(32), level INT, job_id INT ); CREATE TABLE jobs ( id INT NOT NULL PRIMARY KEY, job_name VARCHAR(10), vitality INT, strength INT, agility INT, intelligence INT, luck INT ); INSERT INTO players(id,name,level,job_id) VALUES (1,"パイザ",12,6), (2,"ケン",7,2), (3,"リン",1,1), (4,"ユウ",3,3), (5,"クレア",10,4), (6,"ショウ",5,2), (7,"さくら",7,1), (8,"ジャック",5,4), (9,"ロック",12,6), (10,"じゅん",1,NULL); INSERT INTO jobs(id, job_name, vitality, strength, agility, intelligence, luck) VALUES (1,"戦士",8,8,4,4,3), (2,"盗賊",3,3,8,5,7), (3,"狩人",5,5,7,5,4), (4,"魔法使い",3,2,6,8,6), (5,"僧侶",5,5,3,7,5), (6,"勇者",10,10,10,10,10);

    • ベストアンサー
    • MySQL
  • FOREIGN KEYの追加について。

    FOREIGN KEYの追加について。 MySQL5.1.37 CREATE TABLE `goods` ( `id` int NOT NULL AUTO_INCREMENT, `num` int NOT NULL DEFAULT '1', PRIMARY KEY (`id`), index (`num`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `sales` ( `id` int NOT NULL AUTO_INCREMENT, `num` int NOT NULL DEFAULT '1', PRIMARY KEY (`id`), index (`num`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 上記のようなテーブルを作り、salesテーブルにCSVファイルからデータをインポートしたのち、FOREIGN KEYを子テーブルに追加したいのですが、下記のようなエラーになります。 ALTER TABLE `sales` ADD FOREIGN KEY ( `num` ) REFERENCES `test`.`goods` ( `num` ) ON UPDATE CASCADE ; MySQLのメッセージ: ドキュメント #1452 - Cannot add or update a child row: a foreign key constraint fails (`test`.`#sql-561_cf`, CONSTRAINT `#sql-561_cf_ibfk_1` FOREIGN KEY (`num`) REFERENCES `goods` (`num`) ON UPDATE CASCADE) データをインポートしたのちにFOREIGN KEYを追加するにはどのようにしたらいいのでしょうか?

  • MYSQL vercharについて

    create table salemanagement.syohin( syohin_no int(20), syohin_name verchar(100), kubun verchar(100), cost int(20), price int(20), suryo int(20), purchase_no int(20), purchase_name verchar(100), PRIMARY KEY(syohin_no,purchase_no)); テーブルを作成しようとすると上記の文で、以下のエラーが出ます。 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'verchar(100), kubun verchar(100), cost int(20), price int(20), suryo int(20), pu' at line 3 vercharの部分をcharにするとテーブル作成ができます。 原因は何なんでしょうか?

  • 表の結合と並べ替え

    次のようなテーブル構成で、 CREATE TABLE tbl1 ( id int PRIMARY KEY AUTO_INCREMENT ) ENGINE=InnoDB; CREATE TABLE tbl2 ( id int PRIMARY KEY AUTO_INCREMENT, name VARCHAR(32) ) ENGINE=InnoDB; CREATE TABLE tbl1_tbl2 ( id int PRIMARY KEY AUTO_INCREMENT, tbl1_id int, tbl2_id int, FOREIGN KEY(tbl1_id) REFERENCES tbl1(id), FOREIGN KEY(tbl2_id) REFERENCES tbl2(id) ) ENGINE=InnoDB; CREATE TABLE tbl3 ( id INT PRIMARY KEY AUTO_INCREMENT, tbl1_id int, created datetime, FOREIGN KEY(tbl1_id) REFERENCES tbl1(id) ) ENGINE=InnoDB; [tbl1] id 1 2 3 [tbl2] id  name 1   a 2   b [tbl1_tbl2] id  tbl1_id  tbl2_id 1   1      1 2   1      2 3   1      2 4   2      1 5   3      1 6   3      2 [tbl3] id  tbl1_id  created 1   1    2011-10-17 01:51:39 2   1    2011-10-17 02:51:39 3   3    2000-10-17 01:51:39 ここから次のような「tbl1のid」「tbl2の個数」「tbl3の最新のcreated」を基準とした (下の例は「tbl1のid」を昇順にした結果です) それぞれの並べ替た結果を得たいのですが、どのようなSQL文を記述すれば良いのでしょうか? [tbl1のid] [tbl2のnameのリスト] [tbl3の最新のcreated]   1         a,b,b      2011-10-17 02:51:39   2         a           3         a,b       2000-10-17 01:51:39

    • ベストアンサー
    • MySQL
  • 複数のカラムを対象にしたプライマリキー制約の設定

    テーブル作成後に複数のカラムを対象にしたプライマリーキー制約を設定することはできるのでしょうか。 テーブル作成時であれば、次の方法により設定することができます。 ※col_name1及びcol_name2に設定したい場合 CREATE TABLE tbl_name (col_name1 int NOT NULL, col_name2 int, col_name3 varchar(255), PRIMARY KEY(col_name1, col_name2)); しかし、一旦テーブルを作成した後に、プライマリーキー制約を設定し忘れたことに気が付き、設定したい場合は、いかなる方法によりできるのでしょうか。 次の方法にて試みたものの、エラーが生じました。 【SQL文】 ALTER TABLE tbl_name MODIFY col_name1 int, col_name2 int, PRIMARY KEY(col_name1, col_name2); 【エラー内容】 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'col_name2 int, PRIMARY KEY(col_name1, col_name2)' at line 1 テーブルを削除し、再作成時にプライマリーキー制約を設定する方法によっても対応できますが、削除しなくてもこれを行える方法があるのか否かを知りたく、質問させていただきました。

    • ベストアンサー
    • MySQL
  • MySQL SELECTの指定について

    まず、御覧頂きありがとうございます。 早速質問なのですが、 CREATE TABLE `hoge` ( `id` int(8) NOT NULL, `name` varchar(30) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `hoge` (`id`, `name`) VALUES (1, 'hogeA'), (2, 'hogeB'), (3, 'hogeC'), (4, 'hogeD'); CREATE TABLE `test` ( `id` int(8) NOT NULL, `name` varchar(30) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `test` (`id`, `name`) VALUES (1, 'testA'), (4, 'testD'); という値が入ってるテーブルがあるとします。(長くなってすみません) で、 hoge.id と test.id が重複した場合 test.name を表示させたいです。 期待値としては id,name 1.testA 2,hogeB 3,hogeC 4,testD になります。 業務でJoinを使うようなテーブル構造にそもそもしないというのもあり、クリティカルなSQLコードに不慣れで御知恵を借りたく質問させて頂きました。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 親子関係があるテーブル内での検索

    親のidを保持するテーブルです。 CREATE TABLE `tbl` ( `id` int PRIMARY KEY, `parent_id` int, FOREIGN KEY(`parent_id`) REFERENCES `tbl`(`id`) ) ENGINE=InnoDB; このテーブルで「parent_idがNULLで、かつ、子を持たない(親というか子でもないというか)行」 を検索したいのですが、どのようなSQLを記述すれば良いのでしょうか?

    • ベストアンサー
    • MySQL
  • テーブル作成 外部参照 配列

    はじめまして maruchanといいます。 外部参照のところで詰まっています。 例: テーブルA id primary key name text と言うテーブルがあるとして CREATE TABLE B ( id PRIMARY KEY, z_id integer[] constraint constname references A(id) ); ということを実行したいんですが エラーが出ます。 ERROR: syntax error at or near "cast" at character 98 なにか気づく点がありましたら 返事ください。 宜しくお願いします。