mysql - 从外键查询主键

标签 mysql sql

我是 MySQL 的新手,我很难通过表中指定的外键查询或引用主键。有人可以用相当简单的术语解释如何做到这一点,因为考虑到大多数其他人比我拥有更多的 MySQL 知识,我搜索的所有内容都有点难以理解。

让我们假设这些是表格:

CREATE TABLE IF NOT EXISTS customer(
    custID int AUTO_INCREMENT,
    custLname varchar(30),
    custAdd varchar(100),
    custSuburb varchar(30),
    custPcode varchar(4),
    custState varChar(20),
    custPhone varchar(10),
    PRIMARY KEY (custID)
)ENGINE = INNODB;

CREATE TABLE IF NOT EXISTS tour(
    DailyTourID int,
    tourDate DATE,
    tourTime TIME,
    tourName varchar(30),
    tourDriverID int,
    tourBusID varchar(2),
    PRIMARY KEY (DailyTourID, tourDate),
) ENGINE = INNODB;

CREATE TABLE IF NOT EXISTS TourCustLink(
    TourCustLinkID int AUTO_INCREMENT,
    TourID int,
    TourDate DATE,
    customerID int,
    PRIMARY KEY (TourCustLinkID),
    FOREIGN KEY (TourID, TourDate) REFERENCES tour(DailyTourID, tourDate),
    FOREIGN KEY (customerID) REFERENCES customer(custID)
) ENGINE = INNODB;

我知道这是一个非常糟糕的例子,但假设我想显示每个客户的 custLname、custAdd、custPhone 和 tourDates。我将如何做到这一点?

最佳答案

JOIN他们:

SELECT 
  c.custLname,
  c.custAdd,
  c.custPhone,
  t.TourDate,
  t.TourName,
  ...
FROM TourCustLink   AS tl 
INNER JOIN Customer AS c  ON tl.customerId = c.custID
INNER JOIN Tour     AS t  ON tl.tourID     = t.DailyTourID 
                         AND tl.tourDate   = t.tourDate;

您可能还需要使用 OUTER JOIN(LEFT JOINRIGHT JOIN)而不是 INNER JOIN,以防您想要包含那些不匹配的行。

有关JOIN 类型的更多信息,请参阅这篇文章:

关于mysql - 从外键查询主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16211160/

相关文章:

php - 进入存储过程,需要帮助转换查询

mysql - 在 MariaDB/MySQL 中的多级 JSON 中查询特定值

python - 如何验证 SqlAlchemy 引擎对象

mysql - 构造 SQL 查询

c++ - SQLite - 如何在终端级别和 C++ 应用程序中使用它?

mysql - where 条件问题的子查询

MySQL 每个连接时区未正确填充 CURRENT_TIMESTAMP

php - 加入 where and less then 条件

mysql - UPDATE 和双重 INNER JOIN 引发 mysql 错误

mysql - 如何搜索具有加密字段的 MySQL 数据库