SQL-创建表和查询-正确吗?

时间:2019-03-20 17:42:52

标签: sql database

**仅使用常规SQL,此解决方案是否正确?**

为以下情况设计数据库:您需要在敏捷性比赛中跟踪所有的狗。他们在每次比赛中都有不同的比赛项目,每只狗都有每项比赛的得分。另外,编写SQL查询以返回比赛中的所有狗,每只狗参加的比赛以及他们在该赛事中获得的分数。

CREATE TABLE Dogs (
  Name STRING,
  EventId INT
)
CREATE TABLE Events (
  Name STRING,
  Id INT
)
CREATE TABLE Scores (
  Score INT,
  EventId INT
)
SELECT name
FROM Dogs 
INNER JOIN Events On Events.Id = Dogs.EventId
INNER JOIN Scores On Events.Id = Scores.Event.Id

3 个答案:

答案 0 :(得分:2)

尝试让您的餐桌像

CREATE TABLE Dogs ( Name STRING, DogId INT ) CREATE TABLE Events ( Name STRING, EventId INT ) CREATE TABLE Scores ( Score INT, ScoreId INT ) CREATE TABLE dog_Event ( dogid INT, ScoreId INT ) CREATE TABLE Score_Event( EventId INT, ScoreId INT )

对所有成员进行内部联接!

答案 1 :(得分:1)

您需要使用表'Scores'连接两个表'Dogs'和'Events',然后可以获得所需的信息。 它将类似于以下内容:

   CREATE TABLE Dogs (
    Name varchar(45),
    Id INT
    );

CREATE TABLE Competition (
  Name varchar(45),
  Id INT
);

CREATE TABLE Events (
  Name varchar(45),
  Id INT,
  CompetitionId INT
);

CREATE TABLE Scores (
  DogId INT,
  Score INT,
  EventId INT
);

SELECT Dogs.name DogName,Competition.Name CompetitionName,Event.name EventName,Scores.Score
FROM Dogs
    INNER JOIN Scores On Dogs.Id = Scores.DogId
    INNER JOIN Events On Events.Id = Scores.EventId
    INNER JOIN Competition on Events.CompetitionId=Competition.Id;

已编辑:我添加了表Competition,对select语句进行了必要的更改,并更正了数据类型和某些语法问题。 该查询将获取狗的名字以及比赛,他们参加的比赛以及他们在那次比赛中获得的分数。

答案 2 :(得分:1)

我喜欢单表名称。我也喜欢在所有表格中添加一个id作为通用模式。像您想要的那样做。

我不确定某些点,例如我们是否需要跟踪不同的比赛(我假设是的,因为假设要跟踪的比赛不止一个,因为他们说“对于每个比赛”),以及是否可以在一组比赛中共享一组事件(我只对每个比赛的事件进行建模,而没有在所有比赛中都重复使用事件列表,如果比赛之间存在共同事件,例如“更快的跑者”,这也会很有趣。)

以下是基于以下假设进行建模的要点:

dog
---
id
name

competition
-----------
id
date
name

competition_event
-----------------
id
competition_id
name

/* note: we could make a different event (or event_type) table 
and just use event_id (or event_type_id) in the competition_event table 
if we want to share events among competition... 
would be useful to do stat on stuff like "faster runner" across all competitions */

dog_competition_event_score
---------------------------
id
competition_event_id
dog_id
score

然后对于查询,它应该看起来像这样:

SELECT *
FROM dog d
JOIN dog_competition_event_score dces ON dces.dog_id = d.id
JOIN competition_event ce ON ce.id = dces.competition_event_id
JOIN competition c ON c.id = ce.competition_id;