Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Итоговый запрос / 5 сообщений из 5, страница 1 из 1
15.12.2014, 16:20
    #38834302
KSVSVK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоговый запрос
Есть

1. Список изделий:
Код: sql
1.
2.
3.
4.
5.
CREATE TABLE Images
(Id INTEGER PRIMARY KEY AUTOINCREMENT, 
 Image BLOB, 
 Coment TEXT, 
 Format INTEGER)



2. Иерархическая структура категорий:
Код: sql
1.
2.
3.
4.
CREATE TABLE Structure
(Id INTEGER PRIMARY KEY AUTOINCREMENT,
 Name TEXT NOT NULL, 
 Parent INTEGER NOT NULL)



3. Каждое изделие может попадать в несколько категорий, что учитывается в таблице:
Код: sql
1.
2.
3.
4.
CREATE TABLE Links
(Id INTEGER PRIMARY KEY AUTOINCREMENT,
 Category INTEGER NOT NULL, 
 Item INTEGER NOT NULL)



Требуется получить список изделий, входящих во все выбранные категории. Пытался делать так (частный случай):
Код: sql
1.
2.
SELECT Image, Coment, Format FROM Images 
WHERE Id IN (SELECT Item FROM Links WHERE Category = 3 AND Category = 4 )



Проблема где-то во вложенном запросе. Как выбрать из таблицы значения, Относящиеся одновременно к нескольким указанным категориям?
...
Рейтинг: 0 / 0
15.12.2014, 17:10
    #38834390
fd00ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоговый запрос
join не предлагать?
...
Рейтинг: 0 / 0
15.12.2014, 17:51
    #38834423
Итоговый запрос
KSVSVK,

задача твоя - суть есть "реляционное деление". в рамках SQL-запроса решается либо [not]exists-подзапросами, либо группировкой с последующей фильтрацией результата (group by + having)
...
Рейтинг: 0 / 0
16.12.2014, 04:09
    #38834638
KSVSVK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Итоговый запрос
Что и как в данном случае можно группировать я не знаю, т.к. в моем мозгу GROUP BY ассоциируется с агрегатными функциями, а их в запросе нет.

В принципе, должен работать запрос вида:

Код: sql
1.
2.
3.
SELECT Image, Coment, Format FROM Images 
WHERE Id IN (SELECT Item FROM Links WHERE Category = 3 AND 
          Id IN (SELECT Item FROM Links WHERE Category = 4 ))
...
Рейтинг: 0 / 0
17.12.2014, 06:17
    #38835650
Итоговый запрос
KSVSVK,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT i.Image, i.Coment, i.Format 
  FROM Images i
  join (
         SELECT Item 
           FROM Links 
          WHERE Category in (3,4)
          group by Item
         having count(distinct Category) = 2
       ) v
    on i.id = v.Item
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Итоговый запрос / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]