对于 select 语句的每个输出,执行另一个查询

for each output of a select statement, execute another query

请考虑这个问题:

一个带有两个 table 的 sqlite 数据库,我需要从一个 table 中获取 bookName 并在另一个 table 中对每个结果生成计数。

$ sqlite3 Sqlite.db "select bookName from books" 
myBook.1
myBook.2
myBook.3
myBook.4
myBook.5

尝试了子查询,可能是错误的,结果错误:

sqlite> select count(*) from tags where bookName = (select bookName from books);
753

这就是我想要做的:

$ sqlite3 SSqlite.db "select bookName from books" | while read a ; do  sqlite3 Sqlite.db "select bookName,count(*) from tags where bookName = \"$a\""; done
myBook.1|753
myBook.2|677
myBook.3|573
myBook.4|656
myBook.5|103

这在 SQL 内应该可以更简单,非常感谢任何输入!

如果您只想要 table tags 中书籍的结果,那么您应该按 bookName:

分组
SELECT COUNT(*) counter
FROM tags 
GROUP BY bookName;

如果您想要 table books 中所有书籍的结果,请使用 LEFT 连接和聚合:

SELECT b.bookName, COUNT(t.bookName) counter
FROM books b LEFT JOIN tags t
ON t.bookName = b.bookName 
GROUP BY b.bookName;

如果我没理解错的话,您正在查找分组查询...您几乎答对了:

select bookName, count(*) from tags group by bookName;

根据您的情况,您可能想加入或与您的其他 table (books) 正确加入。

检查文档: