在 SQLite 和/或 MySQL 中,是否可以将列定义为 SELECT
语句?
就像 Book.NumOfPages
列实际上是 SELECT COUNT(*) FROM PAGES WHERE BOOK_ID=BOOK.ID
,所以 NumOfPages 会自动计算分配给一个页面的页数某本书。
请注意,我知道如何在一次选择中获取书籍数量。我想知道是否可以将 select 语句定义为列的一部分。
最佳答案
不清楚您要实现的目标,但您至少有以下选择:
- 使用子查询在 SELECT 语句中定义新列(示例 1)
- 将 p.1 中描述的查询包装在外部
SELECT
中,以便进行连接、分组、计算聚合等(示例 2) - 根据第 1 页(示例 3)中描述的查询创建 View
- 以同样的方式创建一个存储过程
- 还有一个选择 - 在父表(在您的案例簿中)中创建一列,并在子表(在您的案例页面中)上使用触发器 INSERT、UPDATE、DELETE 填充它。这种非规范化方法通常在非常特殊的情况下使用(例如,当您需要加速分析查询时)。
示例 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 |
示例 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 创建 View
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();
关于mysql - SQL列作为选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15488907/