pdbench/census/Queries/q3.sql

100 lines
2.7 KiB
SQL

-- Query 3: prj(sel-const+sel-join)
CREATE TABLE r3 WITHOUT OIDS AS
SELECT TID, POWSTATE,POB,MARITAL,FERTIL FROM rt
WHERE (FERTIL > 4 OR FERTIL = -1) AND
(MARITAL = 1 OR MARITAL = -1) AND
(POWSTATE = POB OR POWSTATE = -1 OR POB = -1);
CREATE TABLE f3 WITHOUT OIDS AS
SELECT ft.* FROM ft, r3
WHERE ft.tid = r3.tid AND ft.Col IN ('MARITAL','FERTIL','POB','POWSTATE');
CREATE TABLE consts3 WITHOUT OIDS AS
SELECT HID, POWSTATE, POB
FROM r3, f3
WHERE r3.TID = f3.TID AND
(POWSTATE = -1 AND POB <> -1 OR POWSTATE <> -1 AND POB = -1) AND
(CASE WHEN POWSTATE = -1 THEN f3.COL = 'POWSTATE' ELSE f3.COL = 'POB' END);
----------
create unique index consts3idx on consts3(hid);
SET ENABLE_SEQSCAN=OFF;
----------
CREATE TABLE c3 WITHOUT OIDS AS
select ct.* from ct, f3
where ct.hid=f3.hid and
(CASE WHEN f3.Col = 'FERTIL'
THEN ct.VALUE > 4
ELSE (CASE WHEN f3.Col = 'MARITAL'
THEN ct.VALUE = 1
ELSE f3.Col IN ('POWSTATE','POB') AND
(NOT EXISTS (SELECT 1 FROM consts3 where consts3.hid = f3.hid) OR
(CASE WHEN f3.Col = 'POWSTATE' THEN
EXISTS (SELECT 1 from consts3 WHERE consts3.hid = f3.hid AND consts3.POB = ct.VALUE)
ELSE (CASE WHEN f3.Col = 'POB' THEN EXISTS (SELECT 1 from consts3 WHERE consts3.hid = f3.hid AND consts3.POWSTATE = ct.VALUE) END)
END))
END)
END);
----------
SET ENABLE_SEQSCAN=ON;
----------
DELETE FROM f3
WHERE HID NOT IN (SELECT HID FROM c3);
------------------------------------
-- apply the join condition POWSTATE=POB
SELECT 1 from filter3();
-------------------------------------
--DELETE FROM c3
--where
--exists(select 1 from f3 _a, f3 _b
-- where _a.cid = _b.cid and _a.tid = _b.tid and
-- _a.hid <> _b.hid and _a.hid = c3.hid and
-- c3.wid not in (select wid from c3 _c
-- where _b.hid = _c.hid));
CREATE TABLE twins3 WITHOUT OIDS AS
SELECT _a.hid as left, _b.hid as right
FROM f3 _a, f3 _b
WHERE _a.cid = _b.cid and _a.tid = _b.tid and _a.hid <> _b.hid;
DELETE FROM c3
where
exists(select 1 from twins3
where twins3.left = c3.hid and
c3.wid not in (select wid from c3 _c
where twins3.right = _c.hid));
--CREATE TABLE DEL3 WITHOUT OIDS AS
--SELECT TID FROM f3
--WHERE HID NOT IN (SELECT HID FROM c3);
CREATE TABLE DEL3 WITHOUT OIDS AS
SELECT f3.TID FROM f3 left join c3 on (f3.hid = c3.hid)
WHERE c3.hid is null;
DELETE FROM r3
WHERE TID IN (SELECT TID FROM DEL3);
DELETE FROM f3
WHERE TID IN (SELECT TID FROM DEL3) OR Col = 'POB';
--DELETE FROM f3
--WHERE TID IN (SELECT TID FROM DEL3) OR Col NOT IN ('POWSTATE','MARITAL','FERTIL');
DELETE FROM c3
WHERE HID NOT IN (SELECT HID FROM f3);