在查询中连接表,没有公共字段

时间:2015-02-03 12:45:46

标签: sql select join inner-join sql-like

我正在为具有以下四个表的库创建数据库。

表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和title,来自“student”的no和name,但只显示持续7天的书籍的结果。

我尝试使用INNER JOIN加入表,并使用'copy'表中的'code'的LIKE子句来过滤持续时间但似乎没有任何对我有用。我加入'book'和'student'时遇到了麻烦,因为他们没有共同的专栏。有办法解决这个问题吗?

修改

好的,以下查询似乎在大多数情况下都能正常工作,除了最后的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的结果。我可能会遗漏一些简单的,有任何建议吗?

1 个答案:

答案 0 :(得分:4)

图书学生

之间似乎没有直接关系
  • 图书复制(isbn)
  • 之间存在关联
  • 复制贷款(代码)之间存在关联
  • 贷款学生之间存在关联(否)

因此我们 图书学生之间存在间接关系

尝试使用此尺寸:

SELECT book.isbn
     , book.title
     , book.author
     , copy.code
     , copy.duration
     , loan.taken
     , loan.due
     , loan.return
     , student.no
     , student.name
     , student.school
     , student.embargo
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

P.S。你控制这个数据结构?如果是这样,可以推荐一些变化。