2015-01-05 1 views
1

У меня есть основной продукт таблицы, он имеет subtables product_store_1, ..., product_store_N на основе поля store_id. В таблице продуктов есть правила, они вставляют новую строку в одну из поддисков, зависит от store_id. Кажется, что все нормально, но основная таблица в настоящее время не пуста, и я хочу получить, какое правило пропущено. Я пытаюсь установитьВыберите In PostgreSQL Наследование таблиц

SELECT store_id,count(*) FROM product GROUP BY store_id; 

Но он работает для всех таблиц product_store_N, я хочу запустить этот запрос только для родительской таблицы.

ответ

3

Вы должны использовать ТОЛЬКО в ОТ п

SELECT store_id,count(*) 
FROM ONLY product 
GROUP BY store_id; 

посмотреть пример:

CREATE TABLE parent (value INT); 
CREATE TABLE child_a() INHERITS (parent); 
CREATE TABLE child_n() INHERITS (parent); 

INSERT INTO parent VALUES (0),(1),(2),(3),(4); 
INSERT INTO child_a VALUES (10),(20),(30),(40),(5); 
INSERT INTO child_n VALUES (50),(60),(70),(80),(6); 

если я запрашиваю select * from parent where value <10 результат будет

Value 
    ----- 
    0 
    1 
    2 
    3 
    4 
    5 
    6 

последние два rows это 5 и 6 относится к child_a и child_n соответственно.

Получить значение в Parent использовать таблицу ONLY в FROM статья. то есть:

SELECT * FROM ONLY PARENT WHERE value <10

Value 
    ----- 
    0 
    1 
    2 
    3 
    4 

sqlfiddle-demo