对于 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
) 正确加入。
检查文档:
请考虑这个问题:
一个带有两个 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
) 正确加入。
检查文档: