【发布时间】:2022-01-23 01:42:10
【问题描述】:
TL;DR:为什么我们必须添加ON table1.column = table2.column?
This question 粗略地询问如果没有外键加入也可以正常工作,为什么我们需要外键。在这里,我想反问。给定最简单的数据库,如下所示:
CREATE TABLE class (
class_id INT PRIMARY KEY,
class_name VARCHAR(40)
);
CREATE TABLE student (
student_id INT PRIMARY KEY,
student_name VARCHAR(40),
class_id INT,
FOREIGN KEY(class_id) REFERENCES class(class_id) ON DELETE SET NULL
);
…和一个简单的连接,像这样:
SELECT student_id, student_name, class_name
FROM student
JOIN class
ON student.class_id = class.class_id;
...为什么我们不能省略 ON 子句?
SELECT student_id, student_name, class_name
FROM student
JOIN class;
对我来说,student 定义中的FOREIGN KEY(class_id) REFERENCES class(class_id) … 行已经包含FROM student JOIN class 具有隐式ON student.class_id = class.class_id 条件的所有必要信息;但我们仍然必须添加它。这是为什么呢?
【问题讨论】:
-
a)您没有必须加入 FK 和 b) 有时同一对表之间存在多个 FK。 c) SQL 是一种硬朗的语言,对于最常见的用例没有很多快捷方式
-
别偷懒,指定join条件! (这也意味着避免 NATURAL JOIN。)
标签: mysql sql join foreign-keys