在SQLite和/或MySQL中,是否可以将列定义为SELECT
语句?
与列Book.NumOfPages
实际上SELECT COUNT(*) FROM PAGES WHERE BOOK_ID=BOOK.ID
一样,因此NumOfPages会自动计算分配给某本书的页数。
请注意,我知道如何在一个选择中获得书籍数量。我想知道是否可以将select语句定义为列的一部分。
答案 0 :(得分:2)
目前尚不清楚您要实现的目标,但至少有以下选项:
SELECT
中的p.1中描述的查询换行,以便进行连接,分组,计算聚合等等(示例2)示例1
SELECT id, `title`,
(SELECT COUNT(*)
FROM pages p
WHERE p.book_id = b.id) npages
FROM books b
输出
| ID | TITLE | NPAGES |
-----------------------
| 1 | book1 | 3 |
| 2 | book2 | 2 |
<强> MySql SQLFiddle 强>
<强> SQLLite SQLFiddle 强>
示例2
SELECT SUM(npages) total_pages
FROM (SELECT id, `title`,
(SELECT COUNT(*)
FROM pages p
WHERE p.book_id = b.id) npages
FROM books b) t
示例3:创建视图
CREATE VIEW vw_books AS
SELECT id, `title`,
(SELECT COUNT(*)
FROM pages p
WHERE p.book_id = b.id) npages
FROM books b
示例4:创建SP
DELIMITER $$
CREATE PROCEDURE sp_books()
BEGIN
SELECT id, `title`,
(SELECT COUNT(*)
FROM pages p
WHERE p.book_id = b.id) npages
FROM books b;
END$$
DELIMITER ;
并使用它
CALL sp_books();
答案 1 :(得分:1)
我相信这就是你的想法:http://en.wikipedia.org/wiki/View_(database)
数据库视图允许您创建一个“假”表,其中包含对其他表的查询。我知道它适用于MySQL,但我不打算对SQLite作出任何承诺。