繁体   English   中英

如何使用SQL查询联接表并获取绑定列数?

[英]How to join tables with SQL query and take number of tied columns?

我有BookTable数据库(与foregin哎LIBID):

| BookID | BookName | BookPrice |  LibID  |
-------------------------------------------
|    1   |  Book_1  |    200    |    1    |
|    2   |  Book_2  |    100    |    1    |
|    3   |  Book_3  |    300    |    2    |
|    4   |  Book_4  |    150    |    4    |

还有LibraryTable

| LibID  | LibName  | LibLocation |
-----------------------------------
|    1   |   Lib_1  |    Loc_1    |
|    2   |   Lib_2  |    Loc_2    |
|    3   |   Lib_3  |    Loc_3    |
|    4   |   Lib_4  |    Loc_4    |

我需要编写SQL查询,该查询将返回有关该库和该库的书数的信息:

| LibID  | LibName  | NumberOfBooks|
------------------------------------
|    1   |   Lib_1  |       2      |
|    2   |   Lib_2  |       1      |
|    3   |   Lib_3  |       0      |
|    4   |   Lib_4  |       1      |

它应该是一个SQL查询,可能带有嵌套查询或联接。。不确定查询的外观如何:

SELECT L.LibID AS LibID, L.LibName AS LibName, COUNT(B) AS NumberOfBooks
FROM LibraryTable L, BookTable B
WHERE L.LibID = B.LibID

那行得通吗?

不,此查询将不起作用。 COUNT汇总数据,因此您必须明确告知DBMS您要计数的数据组。 在您的情况下,这是库(您希望每个库有一个结果记录)。

COUNT的参数是一列,而不是一个表,因此请将其更改为*(即计数记录)或某个列(例如LibID)。

您使用的联接语法有效,但已弃用。 改用显式联接。 在您的情况下,如果可能,外部联接甚至会显示根本没有书籍的图书馆。

select l.libid, l.libname, count(b.libid) as numberofbooks
from librarytable l
left outer join booktable b on b.libid = l.libid
group by l.libid;

您也可以完全不用联接来执行所有这些操作,而可以在子查询中获取帐面数量。 这样,您就不必进行汇总。 在我看来,这种方式更简单易读。

select 
  l.libid, 
  l.libname, 
  (select count(*) booktable b where b.libid = l.libid) as numberofbooks
from librarytable l;
SELECT lt.LibID AS LibID, lt.LibName AS LibName, count(*) AS NumberOfBooks
FROM BookTable AS bt
LEFT JOIN LibraryTable AS lt ON bt.LibID = lt.LibID
GROUP BY bt.LibID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM