Russian Qt Forum

Qt => Базы данных => Тема начата: PaulKaz от Декабрь 14, 2010, 14:42



Название: [Решено] select в setFilter
Отправлено: PaulKaz от Декабрь 14, 2010, 14:42
Добрый день. есть две таблицы, в одной (таблица A) действия студентов:
Код:
+--------+-------------+---------------+
|   id   |   stud_id   |   action_id   |
+--------+-------------+---------------+
|    1   |      2      |       4       |
+--------+-------------+---------------+
|    2   |      3      |       4       |
+--------+-------------+---------------+
|    3   |      1      |       1       |
+--------+-------------+---------------+
Во второй таблице (таблица B) указаны имена студентов и группы:
Код:
+--------+---------------+---------------+
|   id   |   stud_name   |    group_id   |
+--------+---------------+---------------+
|   1    |     Иванов    |       1       |
+--------+---------------+---------------+
|   2    |     Петров    |       1       |
+--------+---------------+---------------+
|   3    |     Сидоров   |       2       |
+--------+---------------+---------------+

Нужно выбрать из таблицы А id действий студентов из группы 1
В sqlite administrator'e пишу такой запрос:
Код:
select id from A where stud_id = (select id from B where group_id=1)
И в результате получают то, что нужно:

Код:
+--------+
|   id   |
+--------+
|   1    |
+--------+
|   3    |
+--------+
А если в setFilter задаю агрумент:
Код:
myModel->setFilter("stud_id = (select id from B where group_id=1)")
То ничего не выходит. Подскажите где я допустил ошибку.



Название: Re: select в setFilter
Отправлено: crossly от Декабрь 14, 2010, 15:15
покажите myModel->lastError().text()


Название: Re: select в setFilter
Отправлено: Hellraiser от Декабрь 14, 2010, 15:25
Цитировать
Нужно выбрать из таблицы А id действий студентов из группы 1
Более правильным будет такой запрос
Код
SQL
SELECT DISTINCT A.action_id FROM A LEFT JOIN B ON A.stud_id=B.id WHERE (B.group_id=1)


Название: Re: select в setFilter
Отправлено: PaulKaz от Декабрь 14, 2010, 15:59
покажите myModel->lastError().text()
Нашёл ошибку в коде, поэтому ничего не происходило.

А вот в запросе действительно ошибка. Выводит только первое совпадение A.stud_id и B.id, остальные пропускает. Можно как-нибудь реализовать мою задачу через setFilters?


Название: Re: select в setFilter
Отправлено: PaulKaz от Декабрь 14, 2010, 16:15
Всё, разобрался. Заменил
...where stud_id = (select...
на
...where stud_id IN (select...

И всё замечательно заработало.