• ベストアンサー

リレーションをSQL文で作る方法は?

urizakaです 今まではSQL-Serverを使っていたのですが、今度からPostgresSQLを使うこと になりました。 さて、そこで質問なのですが、SQL文でテーブルを作るとき、他のテーブルの カラム(フィールド)と作ったテーブルのカラム(フィールド)のリレーションを 作るにはどうすれば良いのでしょうか? 特に、シリアル型で作ったフィールドの値を外部参照キーとして持ってきたい 場合はどのようにSQL文を書けばよいのでしょうか? すみませんが、よろしくお願いします。

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

  • ベストアンサー
  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.2

ヒント ALTER TABLE [dbo].[hogehoge] ADD CONSTRAINT [FK_HogeHoge_Master] FOREIGN KEY ( [No] ) REFERENCES [dbo].[Master] ( [SerialNo] ) ON DELETE CASCADE GO

urizaka
質問者

お礼

ありがとうございます。 さっそく、解析して役に立てたいと思います。

その他の回答 (1)

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.1

答えを書くのは簡単ですが...ここは一つ面白い方法を  SQL Serverを使っているとの事ですので、SQL Serverで該当データベースを選択して、SQLスクリプト生成をメニュー等から実行して見て下さい。  結果をファイルに保存する事で、データベースを作成する為のSQLスクリプト(SQL文法)が生成されます。  これをみれば、リレーションを作る時に必要なSQL文が解ります。  私も、SQL Server → PostgreSQL の時には、このスクリプトを使用(ちょっと修正が必要)してデータベースの移行を行いました

urizaka
質問者

お礼

urizakaです おぉ、なるほどありがとうございます・・・と、言いたいところですが、それが できない状況です。 以前は客先でSQL-Serverを使っていたのですが、今回違う場所の全く違う 環境で違うシステムの開発をすることになったため、そのソースコードが 見れない状況なのです。 うーん、探してみて運良くどこかにあればよいのですが・・・

関連するQ&A

  • SQL文で

    SQL2000serverで 異なる2つのデーターベースの中にある 別のテーブルの情報を SQL文を使って、抽出する事は出来るのでしょうか? たとえば下記のように「DB-A」「DB-B」と言った 二つのDBの中のそれぞれのテーブルのIDフィールドで リレーションを取ってDB-AのTablA1のFldAの 値(AA)からDB-BのTablB1のFldBの値(あ)を 抽出することはSQL文で可能なのでしょうか? DB-A DB-B TablA1 TableB1 ID FldA ID FldB 1 AA 1 あ 2 BB       2 い 3 CC 3 う 4 DD 4 え

  • AccessのテーブルをSQL文にしたい

    urizakaです。 さて、今回質問したいのは、Accessで作ったテーブルをSQL文にする方法です。 具体的には、ACCESSで作ったテーブルを、 CREATE TABLE ××× (              ) INSERT… というSQL文にしたいのですが、これはどうすれば良いのでしょうか? すみませんが、教えてください。            

  • SQL文で・・・

    こんにんちは。ご多忙だと思いますが回答宜しくお願い致します。 今、VBのソースを見ているのですが(VB初心者)、SQL文を作成している 部分があるのですが、ちょっとわかりません。 w_st_sql = "SELECT * FROM AAAA WHERE (K1 || K2 || K3) = " & "'" & p_st_key & "'" 上記のソースは(自分なりに解析したんですが)、テーブルAAAAのレコードで 変数p_st_keyの値がフィールドK1, K2, K3のどれかに当てはまるすべてのフィールドを取得する考えでよろしいのでしょうか? わからない部分は"(K1 || K2 || K3)"です。 すごく簡単な事かもしれませんが宜しくお願い致します。

  • Sqliteのリレーション

    ■利用環境 Sqlite3.3.5 データベース初心者で、 リレーションの概念等、理解出来てない 質問になってましたらすみません。 現在、テーブルを作成する事くらしかできません。 ■質問 Sqliteのテーブルプログラムから、 SQL関数を使ってつくっているのですが、 リレーションの設定の仕方がわかりません。 ■説明 Aと言うテーブルとBと言うテーブルがあるとき useridを主キーとして、お互いにリレーション を作るには、どのようにSQLを書けばよいですか?

  • IsNullについて

    urizakaです さて、現在MySQL(3.23.51)やPosgreSQL(Windows-Native版)をWindows2000で使っていますが、SQL-Serverにおける指定したカラム(フィールド)がNullだった場合に別の値を返す「Isnull(A,B)」(AがNullならBを値にして返す)というようなSQL文は、MySQLやPostgreSQLにはないのでしょうか?また、もしなかった場合、IsnullのようなSQL文と同じ結果を出すために何か方法ってありますでしょうか?。  すみませんが、宜しくお願いします。

  • SQL UPDATE 文 GroupByの値を更新したい

    SQLの UPDATE文について質問させていただきます。 テーブル内のデータを日付と時間で GroupBy して カウント求めています。 求めた値(カウント)を、日付をキーにして同じテーブル内のフィールドに更新するSQLを作成したいと考えています。 GroupByして、カウントを求めることはできるのですが、 どうしても、UPDATE文を実行させることができません。 この処理は、SQLで行うことはできるのでしょうか? 下記に、UPDATE前と後のテーブルデータを記載しています。 日付   時刻 20090101 0:00  20090101 0:00 20090102 0:00 20090102 0:00 20090102 1:00 20090103 2:00 ↓ 日付   時刻 カウント 20090101 0:00 2 20090101 0:00 2 20090102 0:00 2 20090102 0:00 2 20090102 1:00 1 20090103 2:00 1 よろしくお願いいたします。

  • SQL ?で終わる

    アクセスのSQL文で、テーブルのフィールドの値が、最後が?で終わるものを抽出したいのですが SELECT テーブル.フィールド FROM テーブル WHERE (((テーブル.フィールド) Like "[*?]")); これだと1件も抽出されません。 Like "[*?]"が間違ってると思うのですが、どうすればいいでしょうか?

  • SQL文について

    テーブルにprice1とprice2のフィールドがあります。 単純に安い方から抽出するにはorder by price1でいいのですが price1は通常価格でprice2は特別価格とした場合price1は必ず値が ありますがprice2は任意のものだけ値があります。 price1はもちろんのことprice2は値があるものだけ扱いソートして 抽出するにはどのようなsql文を書けばいいのでしょうか?

    • ベストアンサー
    • PHP
  • SQL文の作成

    こんにちわ。 JAVAプログラム上でデータベースを使用して データを取得したいのですが、 SQL文が複雑でわかりません。 一度データを取得して、その値を基に次に参照するカラムが変わるというものなのですが、一度にできるものでしょうか? どなたかお力添えよろしくお願いします。

    • ベストアンサー
    • Java
  • Accessでリンクしたテーブルのリレーションが設定できない

    PostgresへA5SQLとか言うツールを使ってテーブルを2つCreateTableしました。 テストデータも入力しました。 あらためてAccessでPostgresのテーブルをリンクテーブルとして参照しデータを見ることが出来ましたが、Access上でリレーションが未定義でサブフォームを作成することが出来ません。 リレーションを1:多で作成しようと思うのですが、設定フィールドが真っ白でいじれません。 何故でしょうか? 基本的にCreateTableするときに、なにやらリレーション設定する構文が必要だったのでしょうか? 今は、CreateTableしか構文は記述されていません。 どなたかご教授ください。 よろしくお願いします。