MYSQL:根据Len Silverston的“数据模型资源手册”查询表格

时间:2013-11-14 01:22:20

标签: mysql data-modeling

我目前正在为我正在合作的公司开发数据库软件。我将这些表格从Len Silverston的书中删除,因为我发现它是基于数据建模的信息的绝佳来源。

现在,你不需要熟悉他的书来了解我的问题的解决方案,但我想不出任何其他方式来说出我的标题。

假设我有两个表,人物 Person_Names

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)
);

这两个表可以通过 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 |  
-----------------------------------------------------------------------

感谢您抽出宝贵时间阅读我的问题!

1 个答案:

答案 0 :(得分:0)

很容易。我不知道这本书,但可能它包含一些描述表连接的材料及其在查询中的应用:

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 JOIN s'ON子句条件将完全排除这些行。