【问题标题】:How do I join two tables from a database in SQL?如何在 SQL 中连接数据库中的两个表?
【发布时间】:2021-03-21 06:11:39
【问题描述】:

我目前正在做一个项目,我们必须在 SQL 中连接两个表,然后创建一个页面来显示两个表组合的结果。

这是我目前所拥有的:

SELECT *
FROM
    ANIMAL
    LEFT OUTER JOIN
    FOOD_PORTION
ON
    ANIMAL = FOOD_PORTION

然后是结果应该是的第二页:

CREATE TABLE ANIMAL(
    AnimalID        CHAR(5)         PRIMARY KEY,
    AnimalName      CHAR(50)        NOT NULL,
    Species         CHAR(50)        NOT NULL,
    Weight          INT             NOT NULL,
    DOB             DATE            NOT NULL,
    ExhibitID       CHAR(5)         REFERENCES EXHIBIT(ExhibitID)
);


CREATE TABLE FOOD_PORTION(
    PortionSize     INT             NOT NULL,
    AnimalID        CHAR(5)         REFERENCES ANIMAL(AnimalID)
);

SELECT C.Name
FROM   ANIMAL AS C
UNION
SELECT S.Name
FROM   FOOD_PORTION AS S

【问题讨论】:

  • 从模式的角度来看,您可能希望 id 列是 INTBIGINTAUTO_INCREMENT 而不是任意的 CHAR(5) 列。像 AnimalID 这样的东西是二级 (UNIQUE) 索引的好候选。
  • 您的第一个查询是正确的,除非您必须提及连接条件,而 On ANIMAL.AnimalId = Food_Portion.AnimalID

标签: mysql sql join left-join inner-join


【解决方案1】:

这应该可以满足您的需求。使用 tadman 的建议将 char 列更改为 INT。还将 CHAR 更改为 VARCHAR 列。

我还在每个表的标识列中创建了 ID(因此它们会自动填充)。

CREATE TABLE ANIMAL(
    AnimalID        INT PRIMARY KEY IDENTITY,
    AnimalName      VARCHAR(50)        NOT NULL,
    Species         VARCHAR(50)        NOT NULL,
    Weight          INT             NOT NULL,
    DOB             DATE            NOT NULL,
    ExhibitID       CHAR(5)         REFERENCES EXHIBIT(ExhibitID)
);


CREATE TABLE FOOD_PORTION(
    PortionSize     INT IDENTITY,
    AnimalID        INT         REFERENCES ANIMAL(AnimalID)
);

SELECT A.*, FP.*
FROM Animal A 
INNER JOIN Food_Portion FP ON A.AnimalID = FP.AnimalID

【讨论】:

  • @mmcodes 如果可行,请将答案标记为解决方案。谢谢你,很高兴我能帮上忙
猜你喜欢
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
相关资源
最近更新 更多