1

私は現在、一緒に働いている会社のデータベース ソフトウェアを開発中です。データ モデリングに基づく優れた情報源であることがわかったため、Len Silverston の本に基づいて表を作成しました。

さて、私の問題の解決策を知るために彼の本に精通している必要はありませんが、私のタイトルを表現する他の方法は思いつきませんでした.

PersonsPerson_Namesの 2 つのテーブルがあるとします。

CREATE TABLE Persons
(
 party_id    INT    PRIMARY KEY,
 birth_date  DATE,
 social      VARCHAR(20)
);

CREATE TABLE Person_Names
(
 party_id    INT,
 name_id     INT,
 person_name VARCHAR(20),

 CONSTRAINT person_names_cpk
    PRIMARY KEY (party_id, name_id)
);

2 つのテーブルは、party_idで結合できます。また、Person_Namesの下で、name_id = 1は個人の名前(フィールドperson_nameに格納されている) に対応し、 name_id = 2は個人の姓です

*編集* 誰かがいくつかのデータを求めたので、以下にいくつかのデータを追加します:

INSERT INTO Persons VALUES
 (1, '01-01-1981', '111-11-1111'),
 (2, '02-02-1982', '222-22-2222'),
 (3, '03-03-1983', '333-33-3333');

INSERT INTO Person_Names VALUES
 (1, 1, 'Kobe'),
 (1, 2, 'Bryant'),
 (2, 1, 'LeBron'),
 (2, 2, 'James'),
 (3, 1, 'Kevin'),
 (3, 2, 'Durant');

これらのデータを追加したので、次のクエリを実行するにはどうすればよいでしょうか?

-----------------------------------------------------------------------
| Party Id  |  First Name  |  Last Name  |  Birthdate  |  Social No.  |
-----------------------------------------------------------------------
|     1     |    Kobe      |   Bryant    |  01-01-1981 |  111-11-1111 | 
|     2     |    LeBron    |   James     |  02-02-1982 |  222-22-2222 |
|     3     |    Kevin     |   Durant    |  03-03-1983 |  333-33-3333 |  
-----------------------------------------------------------------------

私の質問を読んでくれてありがとう!

4

1 に答える 1

1

非常に簡単に。私は本を​​知りませんが、おそらくテーブルの結合と、次のようなクエリでのそれらのアプリケーションを説明する資料が含まれていると思われます。

SELECT Persons.party_id AS "Party Id",
    firstname.person_name AS "First Name",
    lastname.person_name AS "Last Name",
    Persons.birth_date AS "Birthdate",
    Persons.social AS "Social No."
FROM Persons
    INNER JOIN Person_Names firstname 
        ON Persons.party_id = firstname.party_id
        AND firstname.name_id = 1
    INNER JOIN Person_Names lastname
        ON Persons.party_id = lastname.party_id
        AND lastname.name_id = 2

これは、Person_Names テーブルで名字と姓の両方が定義されている人に対してのみ結果を返すことに注意してください。どちらか一方が存在しない場合、INNER JOINs'ON句の条件はそれらの行を完全に除外します。

于 2013-11-14T01:48:13.467 に答える