【发布时间】:2015-04-02 16:08:39
【问题描述】:
我正在为包含以下四个表的库创建一个数据库。
表 1 - 书
isbn title author
111-2-33-444444-5 Pro JavaFX Dave Smith
222-3-44-555555-6 Oracle Systems Kate Roberts
333-4-55-666666-7 Expert jQuery Mike Smith
表 2 - 复制
code isbn duration
1011 111-2-33-444444-5 21
1012 111-2-33-444444-5 14
1013 111-2-33-444444-5 7
2011 222-3-44-555555-6 21
3011 333-4-55-666666-7 7
3012 333-4-55-666666-7 14
表 3 - 学生
no name school embargo
2001 Mike CMP No
2002 Andy CMP Yes
2003 Sarah ENG No
2004 Karen ENG Yes
2005 Lucy BUE No
表 4 - 贷款
code no taken due return
1011 2002 2015.01.10 2015.01.31 2015.01.31
1011 2002 2015.02.05 2015.02.26 2015.02.23
1011 2003 2015.05.10 2015.05.31
1013 2003 2014.03.02 2014.03.16 2014.03.10
1013 2002 2014.08.02 2014.08.16 2014.08.16
2011 2004 2013.02.01 2013.02.22 2013.02.20
3011 2002 2015.07.03 2015.07.10
3011 2005 2014.10.10 2014.10.17 2014.10.20
我一直在尝试创建一个 SELECT 查询,该查询从“book”中获取 isbn 和标题,从“student”中获取 no 和 name,但只显示持续时间为 7 天的书籍的结果。
我尝试使用 INNER JOIN 加入表,并在“复制”表中使用 LIKE 子句作为“代码”来过滤持续时间,但似乎没有什么对我有用。我无法加入“书”和“学生”,因为它们没有共同的栏目。有没有办法解决这个问题?
编辑
好的,除了最后的 WHERE LIKE 之外,以下查询似乎在大多数情况下都能正常工作;
SELECT book.isbn, book.title,
copy.code, copy.duration,
student.no, student.name
FROM book
INNER JOIN copy
ON copy.isbn = book.isbn
INNER JOIN loan
ON loan.code = copy.code
INNER JOIN student
ON student.no = loan.no
WHERE copy.code LIKE 1013
AND copy.code LIKE 3011
我也试过
WHERE copy.code LIKE 1013 AND 3011
仅显示 1013 的结果。我可能遗漏了一些简单的东西,有什么建议吗?
【问题讨论】:
-
你不能加入没有任何关系的数据。
-
book和student之间的关系似乎是 Book->Copy->Loan->Student。您必须将所有 4 个表连接在一起。试一试:) -
看起来模式重构是有序的......
-
这是我考虑过的另一种方法,但对于看似非常简单的查询来说,它似乎有点长且不必要
标签: sql select join inner-join sql-like