在SQLite和/或MySQL中,是否可以將列定義爲SELECT
語句?SQL列作爲選擇
與列Book.NumOfPages
一樣,實際上是SELECT COUNT(*) FROM PAGES WHERE BOOK_ID=BOOK.ID
,因此NumOfPages會自動計算分配給某本書的頁數。
請注意,我知道如何獲得一個選擇內的書籍數量。我想知道是否可以將select語句定義爲列的一部分。
在SQLite和/或MySQL中,是否可以將列定義爲SELECT
語句?SQL列作爲選擇
與列Book.NumOfPages
一樣,實際上是SELECT COUNT(*) FROM PAGES WHERE BOOK_ID=BOOK.ID
,因此NumOfPages會自動計算分配給某本書的頁數。
請注意,我知道如何獲得一個選擇內的書籍數量。我想知道是否可以將select語句定義爲列的一部分。
目前尚不清楚你想要達到的,但你至少有以下選項:
實施例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創建一個視圖
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();
我相信這是你在想什麼:http://en.wikipedia.org/wiki/View_(database)
數據庫視圖,可以做一個「假」表由查詢其他表。我知道它適用於MySQL,但我不會對SQLite做出任何承諾。
所以你建議 「藏」實際的書桌和訪問唱它viá一個視圖? – 2013-03-18 23:39:56
沒那麼快。首先確保你正在尋找一個視圖。在你的例子中,NumberOfPages將是視圖的一列,而不是任何表。 – 2013-03-18 23:47:05
這不是我問的。我可以直接將它們寫入表中,因此列NumOfPages是查詢的別名(即調用NumOfPages總是選擇一些內容)? – 2013-03-19 00:05:05
查看更新的答案。你有幾個選擇。使用什麼取決於你爲什麼需要它。 – peterm 2013-03-19 00:31:52
還有一個選項 – peterm 2013-03-19 00:39:44