Это не ясно, что вы пытаетесь достичь, но, по крайней мере, следующих параметры:
- Используйте подзапрос, чтобы определить свой новый столбец в вашем ЗЕЬЕСТЕ (пример 1)
- Wrap запроса описанный в ч.1 в космическом
SELECT
для того, чтобы сделать присоединяется, группировка, известково агрегат и т.д. (пример 2)
- Создание представления на основе запроса, описанного в ч.1 (пример 3)
- Создать хранимой процедуры таким же образом
- И еще один вариант - создать столбец в родительской таблице (в ваших книгах) и заполнить его триггерами 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 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 Создание СП
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();
Это не то, что я спросил. Могу ли я написать их непосредственно в таблицу, так что столбец NumOfPages является псевдонимом для запроса (т. Е. Вызов NumOfPages всегда выбирает что-то)? –
См. Обновленный ответ. У вас есть несколько вариантов. Что использовать, зависит от того, зачем вам это нужно. – peterm
И еще один вариант – peterm