Из отсортированного набора строк получить N строк начиная со строки под номером M

Доброго времени суток.

Есть база данных со следующими таблицами связанными отношением многие-ко-многим

1.продукты

CREATE TABLE Products (
    id INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
    name VARCHAR(64) NOT NULL,
    UNIQUE(name)
);

2.теги для продуктов

CREATE TABLE Tags (
    id INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
    tagName VARCHAR(64) NOT NULL,
    tagValue VARCHAR(64) NOT NULL,
    UNIQUE(tagName, tagValue)
);

3.Связующая Таблица

CREATE TABLE ProductsTags (
    productId INT NOT NULL,
    tagId INT NOT NULL,
    FOREIGN KEY(productId) REFERENCES Products(id) ON DELETE CASCADE,
    FOREIGN KEY(tagId ) REFERENCES Tags(id) ON DELETE CASCADE
}

Необходимо получить теги для N продуктов из отсортированного по имени списка продуктов, начиная с продукта под номером M. Значение N и M могут быть любыми (N и M точно будут больше нуля).


Ответы (1 шт):

Автор решения: t0lik

Что-то типа такого:

select p.*,t.* from Tags t join 
ProductTags pt on (t.id=pt.tagId) join 
(select pr.* from products pr
 order by pr.name
 limit N
 offset M-1
) as p on (pt.productId=p.id)
→ Ссылка