आप श्रेणी डेटा प्रकारों का उपयोग कर सकते हैं और प्रत्येक असंबद्ध प्रकार को एक पंक्ति में संग्रहीत कर सकते हैं।
आपके नमूने के लिए:
-- The table
CREATE TABLE sets(id text, range int4range);
-- Values of set A
INSERT INTO sets VALUES('A', '[1,1]'),('A','[7,7]'),('A','[9,13]');
-- Values of set B
INSERT INTO sets VALUES('B','[1,1]'),('B','[7,7]'),('B','[10,10]');
यह जाँचने के लिए कि क्या B, A का एक उपसमुच्चय है, आप दोनों को उन सभी टुपल्स के साथ जोड़ सकते हैं जिनमें A की श्रेणी में B की श्रेणी शामिल है:
SELECT b.range
FROM sets b JOIN sets a
ON a.range @> b.range
WHERE a.id='A' AND b.id='B'
इसके साथ, आप जांच सकते हैं कि सेट बी के सभी मान उपरोक्त परिणाम में हैं (जिसका अर्थ यह होगा कि बी की सभी श्रेणियां कम से कम एक श्रेणी में समाहित हैं):
SELECT NOT EXISTS(
SELECT 1 FROM sets q WHERE q.id='B' AND q.range NOT IN (
SELECT b.range
FROM sets b JOIN sets a
ON a.range @> b.range
WHERE a.id='A' AND b.id='B'
));
चौराहा पाने के लिए, आप दोनों को पार कर सकते हैं और खाली लोगों को बाहर कर सकते हैं:
SELECT * FROM (
SELECT a.range * b.range AS intersec
FROM sets a CROSS JOIN sets b WHERE a.id='A' AND b.id='B'
) i WHERE NOT isempty(i.intersec);
इस दृष्टिकोण के बारे में एक समस्या यह है कि आपको अलग-अलग टुपल्स के माध्यम से केवल असंबद्ध श्रेणी S रखना चाहिए। उदाहरण के लिए, एक सेट से रेंज [1,5] और [4,7] केवल [1,7] के साथ एक टपल में रहना चाहिए। यह सुनिश्चित करने के लिए, आप उन्हें एक अस्थायी तालिका में सम्मिलित कर सकते हैं (सम्मिलित या अद्यतन करते समय), वे तालिका में स्वयं को ओवरलैप करने वाले टुपल्स के साथ क्रॉस में शामिल हो जाते हैं और वे उनसे जुड़ जाते हैं और दूसरों को वैसे ही रखते हैं जैसे वे हैं।