-- test functional dependencies based on primary keys/unique constraints
-- base tables
-- group by primary key (OK) SELECT id, keywords, title, body, created FROM articles GROUPBY id;
-- group by unique not null (fail/todo) SELECT id, keywords, title, body, created FROM articles GROUPBY title;
-- group by unique nullable (fail) SELECT id, keywords, title, body, created FROM articles GROUPBY body;
-- group by something else (fail) SELECT id, keywords, title, body, created FROM articles GROUPBY keywords;
-- multiple tables
-- group by primary key (OK) SELECT a.id, a.keywords, a.title, a.body, a.created FROM articles AS a, articles_in_category AS aic WHERE a.id = aic.article_id AND aic.category_id in (14,62,70,53,138) GROUPBY a.id;
-- group by something else (fail) SELECT a.id, a.keywords, a.title, a.body, a.created FROM articles AS a, articles_in_category AS aic WHERE a.id = aic.article_id AND aic.category_id in (14,62,70,53,138) GROUPBY aic.article_id, aic.category_id;
-- JOIN syntax
-- group by left table's primary key (OK) SELECT a.id, a.keywords, a.title, a.body, a.created FROM articles AS a JOIN articles_in_category AS aic ON a.id = aic.article_id WHERE aic.category_id in (14,62,70,53,138) GROUPBY a.id;
-- group by something else (fail) SELECT a.id, a.keywords, a.title, a.body, a.created FROM articles AS a JOIN articles_in_category AS aic ON a.id = aic.article_id WHERE aic.category_id in (14,62,70,53,138) GROUPBY aic.article_id, aic.category_id;
-- group by right table's (composite) primary key (OK) SELECT aic.changed FROM articles AS a JOIN articles_in_category AS aic ON a.id = aic.article_id WHERE aic.category_id in (14,62,70,53,138) GROUPBY aic.category_id, aic.article_id;
-- group by right table's partial primary key (fail) SELECT aic.changed FROM articles AS a JOIN articles_in_category AS aic ON a.id = aic.article_id WHERE aic.category_id in (14,62,70,53,138) GROUPBY aic.article_id;
-- example from documentation
CREATE TEMP TABLE products (product_id int, name text, price numeric); CREATE TEMP TABLE sales (product_id int, units int);
-- OK SELECT product_id, p.name, (sum(s.units) * p.price) AS sales FROM products p LEFTJOIN sales s USING (product_id) GROUPBY product_id, p.name, p.price;
-- fail SELECT product_id, p.name, (sum(s.units) * p.price) AS sales FROM products p LEFTJOIN sales s USING (product_id) GROUPBY product_id;
ALTERTABLE products ADDPRIMARYKEY (product_id);
-- OK now SELECT product_id, p.name, (sum(s.units) * p.price) AS sales FROM products p LEFTJOIN sales s USING (product_id) GROUPBY product_id;
CREATE TEMP TABLE node (
nid SERIAL,
vid integerNOTNULLdefault'0',
type varchar(32) NOTNULLdefault'',
title varchar(128) NOTNULLdefault'',
uid integerNOTNULLdefault'0',
status integerNOTNULLdefault'1',
created integerNOTNULLdefault'0', -- snip PRIMARYKEY (nid, vid)
);
-- multiple dependencies CREATE TEMP VIEW fdv2 AS SELECT a.id, a.keywords, a.title, aic.category_id, aic.changed FROM articles AS a JOIN articles_in_category AS aic ON a.id = aic.article_id WHERE aic.category_id in (14,62,70,53,138) GROUPBY a.id, aic.category_id, aic.article_id;
CREATE TEMP VIEW fdv3 AS SELECT id, keywords, title, body, created FROM articles GROUPBY id UNION SELECT id, keywords, title, body, created FROM articles GROUPBY id;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.