SQL连接3个表多对多关系

时间:2018-01-17 21:44:14

标签: sql many-to-many

有3个表有多对多关系:

--------------------------------
|student_id|first_name|last_name|
---------------------------------

--------------
|book_id|name|
--------------

借款

--------------------
|book_id|student_id|
--------------------

查询应该找到书籍和相关学生的姓名。 现在查询返回0行,表中包含信息,我的错误可能是什么?

SELECT books.name AS "book name", students.*  
FROM  books   
JOIN borrowings ON books.book_id = borrowings.book_id  
JOIN students ON students.student_id = borrowings.student_id;

1 个答案:

答案 0 :(得分:1)

你的sql应该可行。你在使用主键和外键吗?如果没有,请检查是否存在数据不一致。

即。在postgesql中,您可以通过以下方式修复它:

ALTER TABLE students ADD PRIMARY KEY (student_id);
ALTER TABLE books ADD PRIMARY KEY (book_id);
ALTER TABLE borrowings ADD FOREIGN KEY (book_id) REFERENCES books(book_id);
ALTER TABLE borrowings ADD FOREIGN KEY (student_id) REFERENCES students(student_id)