Russian Qt Forum
Ноябрь 24, 2024, 12:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено] select в setFilter  (Прочитано 2386 раз)
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)")
То ничего не выходит. Подскажите где я допустил ошибку.

« Последнее редактирование: Декабрь 14, 2010, 16:16 от PaulKaz » Записан
crossly
Гость
« Ответ #1 : Декабрь 14, 2010, 15:15 »

покажите myModel->lastError().text()
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #2 : Декабрь 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)
Записан
PaulKaz
Гость
« Ответ #3 : Декабрь 14, 2010, 15:59 »

покажите myModel->lastError().text()
Нашёл ошибку в коде, поэтому ничего не происходило.

А вот в запросе действительно ошибка. Выводит только первое совпадение A.stud_id и B.id, остальные пропускает. Можно как-нибудь реализовать мою задачу через setFilters?
Записан
PaulKaz
Гость
« Ответ #4 : Декабрь 14, 2010, 16:15 »

Всё, разобрался. Заменил
...where stud_id = (select...
на
...where stud_id IN (select...

И всё замечательно заработало.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.259 секунд. Запросов: 23.