• ベストアンサー

重複を許すキーの構文がわかりません。

データベース自体はPostgreSQLを使っています。そして、アクセス2003を使って、テーブルリンクで閲覧しています。 あるフィールドに検索が早くなるようにキーを設けたいのですが、 重複を許すキーの構文がわかりません。 PRIMARY KEY, UNIQUEの設定はわかるのですが、 どのように記述すればよいのでしょうか? 以下、アクセスのプロパティです。 インデックス ●いいえ デフォルト、無指定 ●はい(重複あり)[***** ここの部分のSQLが知りたい *****] ALTER TABLE テーブル名 ADD ???????? (フィールド); ●はい(重複なし)UNIQUE もしくは値要求混みのPRIMARY KEY ALTER TABLE テーブル名 ADD UNIQUE (フィールド); ALTER TABLE テーブル名 ADD PRIMARY KEY (フィールド);

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

  • ベストアンサー
回答No.2

DDL(定義系)SQLでいいなら、PostgreSQLを含め多くのRDBMSでは、 create index文を使います。 create [unique] index インデクス名 on 表名(列名1[,...]) uniqueを指定すれば重複禁止、省略すれば重複可のインデクスになります。 http://www.postgresql.jp/document/pg800doc/html/sql-createindex.html

その他の回答 (1)

回答No.1

アクセスのことはよくわからないので、一般的なデータベースのお話として。 PRIMARY KEY, UNIQUE では重複することは許されないので、 create index インデックス名 on テーブル名(フィールド) ; のはずです。 参考 http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_kj01.htm http://www.techscore.com/tech/sql/15_01.html

関連するQ&A

  • MYSQLのフィールドにユニークキーを設定する。

    すでに作ってしまったテーブルにユニークキーを付けたいと考えています。最悪の場合、新しくカラムを作っての追加でもかまわないのですが、いろいろ試してもエラーが返されてしまいます。 codeというカラムにユニークキーを設定したいのですが、 alter table テーブル名 modify unique code; alter table テーブル名 add unique code2; alter table テーブル名 modify code unique; alter table テーブル名 add code2 unique; alter table テーブル名 modify code test unique; alter table テーブル名 add code2 test unique; alter table テーブル名 modify unique code test; alter table テーブル名 add unique code2 test; alter table テーブル名 modify (code unique); alter table テーブル名 add (code2 unique); alter table テーブル名 modify (code text unique); alter table テーブル名 add (code2 text unique); など、思いつく限り試し、グーグルで調べる限り調べたのですが、出てきたものをためしてもダメでした。 テーブルを作成した後、カラムにユニークキーを設定した経験のある方、どのように変更をしたのでしょうか?

    • ベストアンサー
    • MySQL
  • 2つの項目が重複するレコードを抽出する方法はありますか?

    MySQL4.1で既存データに対し複合キーを新しく設定したいのですが、 ALTER TABLE `test` ADD PRIMARY KEY (`a`,`b`) としても重複データが存在する為、作成できませんでした。 10万件あるテーブルから重複するレコードを手動で削除したいのですが、aとbが重複しているレコードだけ抽出するSQL文はありますでしょうか?

    • ベストアンサー
    • MySQL
  • ACCESSのSQLクエリについて

    AccessでのSQLについて教えてください。 リンクテーブルAから新しいテーブルAを作成し、その新テーブルにオートナンバー型のフィールドを追加して、そのフィールドに主キーを設定する、という作業をしたいと思っています。 以下の3つの構文のクエリをそれぞれ作って出来たのですが、この操作を一度に行いたくて、以下のように1つのクエリに入れると、「FROM句の構文エラーです」と出てきてしまいます。 全くの素人で仕組みは全然理解できてないので、ちょっと調べたのですがよくわかりません。上手くいく入力方法を教えていただけると嬉しいです。よろしくお願いいたします。 SELECT Sheet1A.F1, Sheet1A.F2, Sheet1A.F3, Sheet1A.F4, Sheet1A.F9 INTO A FROM Sheet1A ALTER TABLE A ADD ID COUNTER ALTER TABLE A ADD PRIMARY KEY (ID);

  • すでにあるテーブルのフィールドにユニークキーを設定できますか?

    はじめまして。 私のレンタルサーバーには最初からMYSQLというデータベースが付いています。 テーブルを設定して、すでにいくつかのデータを入力しています。 最近、重複して同じIDが入力できることに気づきました。 重複できないようにしたいと思い、調べたところ、ユニークキーというものを設定すれば重複しないらしいと言うことを知りました。 そちらのレンタルサーバーにはすでにPHPMYADMINが使えるようになっています。 PHPMYADMINをつかってIDのフィールドにユニークキーを設定しようとしました。 すると下記のようなエラーがでて、ユニークキーの設定に失敗しました。 > エラー > 実行した SQL 照会: > > ALTER TABLE `テーブルの名前` ADD UNIQUE ( > > `フィールドの名前` > ); > すでにデータが入力されているテーブルのフィールドにはユニークキーは設定できないのでしょうか? もし、すでにデータが入力されているテーブルのフィールドにユニークキーを設定する方法があったら教えてください。 もしくは私が勘違いをしている部分があったら教えて頂ければ幸いです。

    • ベストアンサー
    • MySQL
  • Access2003_ALTER TABLE構文

    Accessのテーブルにフィールドを追加したくSQLで命令文を書いています。 1.[T_テーブル1]というテーブルに[フィールドA]というフィールドを データ型:数値型 フィールドサイズ:単精度浮動小数点型 小数点以下表示桁数:2位まで表示 で追加したいです。 →ALTER TABLE T_テーブル1 ADD COLUMN フィールドA FLOAT4 これに少数点以下桁数を設定するにはどう書けばよろしいでしょうか? 2.[T_テーブル1]というテーブルに[フィールドB]というフィールドを データ型:数値型 フィールドサイズ:長整数型 で追加しました。 →ALTER TABLE T_テーブル1 ADD COLUMN フィールドA INT 「説明」の箇所に説明書きも入れたいのですがここでの設定は可能でしょうか? 以上2点につきましてご指導頂きたくよろしくお願い致します。

  • 主キーを追加しようとするとエラー

    MYSQL4.0を使っていますが、 テーブル作成後、主キーを追加しようと ALTER TABLE MYTABLE ADD PRIMARY KEY ID; などと書くと、syntaxエラーになってしまいます。 どこが悪いのでしょうか、 分かる人がいましたら教えてください。

    • ベストアンサー
    • MySQL
  • FOREIGN KEYの書き方

    オラクル9iを使っています たとえば ☆MST_商品テーブル        ・商品コード  varchar2(10) 主キー  ・分類区分   varchar2(10)  ・商品名称   varchar2(30)  ・仕入先コード varchar2(10) ☆MST_仕入先テーブル  ・仕入先コード varchar2(10)主キー  ・仕入先名称  varchar2(30)    ・取引区分   varchar2(30) があったとして 商品テーブルの仕入先コードと仕入先テーブルの仕入先コードにFOREIGN KEYを使ってリレーションを張りたい場合どのようにSQL文は書いたらいいのでしょうか? ☆CREATE TABLE MST_仕入先    (仕入先コード varchar2(10) NOT NULL,     仕入先名称 varchar2(30), 取引区分 varchar2(30), ALTER TABLE MST_仕入先 ADD CONSTRAINT PMST_仕入先 PRIMARY KEY(仕入先コード); と CREATE TABLE MST_商品 (商品コード varchar2(10),     分類区分 varchar2(10)     商品名称 varchar2(30), 仕入先コード varchar2(10), ALTER TABLE MST_商品 ADD CONSTRAINT PMST_商品 PRIMARY KEY(商品コード); でテーブルと主キーを設定し ALTER TABLE MST_商品 ADD CONSTRAINT FMST_商品 FOREIGN KEY(仕入先コード) REFERENCES MST_仕入先(仕入先コード); ほかにもいろいろ試したのですが にっちもさっちもいかないのでよろしくお願いします。

  • OpenOffice Baseにてデータを作成、現在2つの異なるテーブ

    OpenOffice Baseにてデータを作成、現在2つの異なるテーブル("A","B")を作成し、各々のテーブルに同じ定義を 持つフィールド"a"を作成しました。 そこで、各テーブルの"a"フィールドに関連付け(リレーション)を設定したいのですが、以下のようなエラーが出て 設定ができません。 どうすれば良いでしょうか? エラーメッセージの内容は以下です。 ↓ ---------------------------------------------------------------------------------------- SQL ステータス: S0011 エラーコード: -170 Primary or unique constraint required on main table "A" in statement [ALTER TABLE "B" ADD FOREIGN KEY("a") REFERENCE "A" ("a")]

  • インデックスの削除と、インデック名のつけ方について

    PostgreSQL8.2.24を使っています。 インデックスの削除と、インデック名のつけ方についてお聞きしたいです。 まず、削除ですが、create index tbl_fld_key on tbl (fld); としたものは、drop index tbl_fld_key;で削除できますが、 create tbl ( fld integer, unique key (fld) ); としたものは、drop index tbl_fld_keyで削除できません。 インデックス名は\diコマンドで表示されている tbk_fld_keyです。 メッセージは次のとおりです。 db =# drop index tbl_fld_key; ERROR: cannot drop index tbl_fld_key because constraint tbl_fld_key on table tbl requires it HINT: You may drop constraint tbl_fld_key on table tbl instead. あと、PostgreSQLのインデック名の規則について インデックス名を見ただけで判断できるように作られるようですが PRIMARY KEY テーブル名_フィールド名_pkey UNIQUE    テーブル名_フィールド名_key 重複可    テーブル名_フィールド名_??? <<--- この部分が知りたいです。

  • DB2でUNIQUE制約を削除したい

    DB2で以下のように明示的な名前のないUNIQUE制約を削除したいのですが、よい方法をご存じの方がおられましたらご教授ください。 (例) 1. 表の作成 CREATE TABLE TEST ( COL1 INT NOT NULL) 2. 明示的な名前を作成せずにUNIQUE制約を作成 ALTER TABLE TEST ADD UNIQUE (COL1); 上記のように名前指定しなかったUNIQUE制約を ALTER TABLE文で削除したいのですが、どのように すればよろしいのでしょうか? マニュアルの構文では制約名を指定する必要あるようで、 syscat.tabconstカタログで自動でつけられた制約名を調べた後、 以下のように指定したところ制約は削除されました。 (例) ALTER TABLE TEST DROP CONSTRAINT SQL090123084403480 しかしプログラムの修正が少なくなるよう、制約名を調べずにALTER TABLE 一文で削除できないものかと悩んでおります。 もしくはストアドプロシージャでも構いません。 よろしくお願いします。