何を達成しようとしているのかは明確ではありませんが、少なくとも次のオプションがあります。
- サブクエリを使用して、SELECT ステートメントで新しい列を定義します (例 1)。
SELECT
結合、グループ化、集計の計算などを行うために、p.1 で説明されているクエリをアウターでラップします(例 2)。
- p.1 で説明されているクエリに基づいてビューを作成する (例 3)
- 同じ方法でストアド プロシージャを作成する
- もう 1 つのオプション - 親テーブル (ケースの本) に列を作成し、子テーブル (ケースのページ) にトリガー 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 |
MySql SQLフィドル
SQLLite SQLフィドル
例 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();