0
我不確定這個問題的適當標題是什麼。編寫「斷言」視圖 - 選擇計數(*)子查詢的聯合
無論如何,我有一個相當複雜的SQL模式和一些建立在它上面的視圖。 爲了確保視圖正確,我維護一些「斷言」,即SQL中的布爾表達式,用COUNT(*)
和其他應該爲true的聚合函數表示。
舉個例子,比如說我有兩個表table_a
和table_b
和他們兩個很簡單的觀點不僅僅是再現出來:
CREATE TABLE table_a (foo VARCHAR(50));
CREATE TABLE table_b (foo VARCHAR(50));
CREATE OR REPLACE VIEW view_a AS SELECT * FROM table_a;
CREATE OR REPLACE VIEW view_b AS SELECT * FROM table_b;
然後兩個非常簡單的斷言將是排在view_a
數應該等於table_a
。分別爲view_b
和table_b
。
我然後創建「斷言」視圖爲:
CREATE VIEW ASSERTIONS AS
SELECT
((SELECT COUNT(*) FROM view_a) - (SELECT COUNT(*) FROM table_a)=0) AS a
,
((SELECT COUNT(*) FROM view_b) - (SELECT COUNT(*) FROM table_b)=0) AS b
這產生:
select * from assertions;
a | b
-----------
true | true
與上述的問題是,我想的信息不存在不同的行,而不是作爲不同的列,以便我可以爲每個「斷言」添加一個名稱或描述。此外,由於它們顯示爲新列(而不是作爲新行)
我如何寫上面的「斷言」視圖,使我得到增加更多的斷言成爲與SQL我現在有麻煩的:
select * from assertions;
description | result
----------------------
'blah blah a' | true
'blah blah b' | true