在合并三张桌子外钥匙时需要帮助



我创建了这样的三个表格,

1。

CREATE TABLE person (
id int NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL,
age int,
PRIMARY KEY (id)
);

2。

CREATE TABLE address (
id int NOT NULL AUTO_INCREMENT,
city varchar(50) NOT NULL,
post_code int NOT NULL,
person_id int NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (person_id) REFERENCES person(id)
);

3

CREATE TABLE subjects (
id int NOT NULL AUTO_INCREMENT,
subjects_s varchar(50) NOT NULL,
address_id int NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (address_id) REFERENCES address(id)
);

现在在桌子中,我有一些这样的信息:

+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  1 | Sohan  |   17 |
|  2 | Farhan |   18 |
+----+--------+------+

地址

+----+-------+-----------+-----------+
| id | city  | post_code | person_id |
+----+-------+-----------+-----------+
|  1 | Tongi |      1711 |         1 |
|  2 | Dhaka |      1230 |         2 |
+----+-------+-----------+-----------+

主题

+----+--------------------+------------+
| id | subjects_s         | address_id |
+----+--------------------+------------+
|  1 | Accounting Finance |          1 |
|  2 | Physics Math       |          2 |
+----+--------------------+------------+

现在我想一起显示所有这些数据。我怎样才能做到这一点?请帮助!

您应该能够使用SQL Join语句组合这些。

MySQL加入文档中详细介绍了语法。

在您的桌子上,您的查询应该看起来像这样:

SELECT person.*, address.*, subjects.* 
  FROM person 
    JOIN address ON person.id = address.person_id 
    JOIN subjects ON address.id = subjects.address_id

请记住,此示例使用内部连接,这可能不是表中数据的正确类型。我建议阅读上面链接的文档以获取进一步的指导。

编辑:这是一个DB小提琴,演示了上面的JOIN语法。

我理解这个问题是在询问如何检索三个表中的所有相关数据。根据我们试图实现的结果,可能可以使用子Queries而不是JOIN从多个表获取数据。例如,如果我们想知道哪个学生正在接受"物理学数学",那么我们可以使用子征服来回答这个问题。

SELECT person.* FROM person WHERE person.id IN 
  (SELECT person_id from address where address.id IN 
     (SELECT address_id from subjects WHERE subjects.subjects_s = "Physics Math")
  )

这是一个DB小提琴,演示了上述子征服。

最新更新