【发布时间】:2010-07-27 00:04:16
【问题描述】:
我有一个 Books 表,用于存储图书数据(ISBN、标题、作者等)。为了区分哪些书是彼此的版本,我有一个字段 Edition_Group_ISBN,它是组中的任意 ISBN。
我无法获得这个查询,它应该根据 ISBN 提供图书数据和其他版本的数量:
SELECT *, Editions_Count
FROM Books
LEFT JOIN ((SELECT Edition_Group_ISBN, COUNT(*) AS Editions_Count
FROM Books
WHERE Edition_Group_ISBN IN (SELECT Edition_Group_ISBN
FROM Books)
GROUP BY Edition_Group_ISBN) AS b
) ON (Books.Edition_Group_ISBN = b.Edition_Group_ISBN
AND Books.Edition_Group_ISBN != NULL)
WHERE ISBN = 9780140447897
查询给出了 9780140447897 的图书数据,但给出的 Editions_Count AS NULL,表明 LEFT JOIN 不起作用。
【问题讨论】:
-
我认为您需要另一个表来跟踪版本分组;使用一个任意的 ISBN 为我敲响了警钟。
-
@staticsan 我确实觉得以这种方式存储它有点奇怪,但实际的缺点是什么?
-
优点是:1-更容易将数据加载到数据库中。使用唯一 ID 2 会更困难 - 它节省了一些数据库空间
-
给出的答案适用于一本书。我想知道是否可以将它们写成与多个 ISBN 一起使用的方式。
-
缺点源于您重新利用 ISBN 的事实。您的代码还必须注意 ISBN 也可以表示所有版本,对于其中一个版本,它与 ISBN 相同。