如何使用 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 查询,该查询将 return 是有关图书馆的信息和该图书馆的图书数量:
| 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
这行得通吗?
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
不,这个查询将不起作用。 COUNT 聚合数据,因此您必须明确地告诉 DBMS 您希望对哪组数据进行计数。在您的情况下,这是图书馆(您希望每个图书馆有一个结果记录)。
COUNT的参数是一列,不是table,所以改成*(即计数记录)或某列(如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;
我在数据库中有 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 查询,该查询将 return 是有关图书馆的信息和该图书馆的图书数量:
| 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
这行得通吗?
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
不,这个查询将不起作用。 COUNT 聚合数据,因此您必须明确地告诉 DBMS 您希望对哪组数据进行计数。在您的情况下,这是图书馆(您希望每个图书馆有一个结果记录)。
COUNT的参数是一列,不是table,所以改成*(即计数记录)或某列(如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;