Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2014, 16:32   #11
Dagmanor
Пользователь
 
Регистрация: 26.02.2014
Сообщений: 26
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
это "почти" ваш запрос, но он должен работать
Код:
SELECT seminar.* , test.guid
FROM seminar, test 

WHERE seminar.id IN ( SELECT course_seminar.seminar_id 
                      FROM course_seminar 
                      WHERE course_seminar.Course_id = 2 
                   )
  and test.id IN ( SELECT course_test.test_id 
                   FROM course_test 
                   WHERE course_test.course_id = 2 
                   )
Да, это почти то. А можно как-нибудь сделать так как на картинке? (если сморозил глупость сильно не пинайте). Сверху так как есть, снизу желаемый вариантБезымянный.jpg
Dagmanor вне форума Ответить с цитированием
Старый 26.02.2014, 16:34   #12
Dagmanor
Пользователь
 
Регистрация: 26.02.2014
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Я бы выбрал отдельно уроки и отдельно тесты и объединил два запроса через UNION. Добавив признак для отличия одних от других
Если можно об этом по-подробнее.
Dagmanor вне форума Ответить с цитированием
Старый 26.02.2014, 16:38   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Схематично
Код:
SELECT A as Name1,B as Name2,1 as Priznak FROM ...
UNION
SELECT C as Name1,D as Name2,2 as Priznak FROM ...
A и С одного типа, любое из них может быть NULL
B и D аналогично
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.02.2014, 16:43   #14
Dagmanor
Пользователь
 
Регистрация: 26.02.2014
Сообщений: 26
По умолчанию

Спасибо большое. Буду пробовать.
Dagmanor вне форума Ответить с цитированием
Старый 26.02.2014, 16:46   #15
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
А можно как-нибудь сделать так как на картинке?
такое лучше через union
Цитата:
Если можно об этом по-подробнее.
Код:
select 
  seminar.id as idseminar, seminar.sname as nameseminar, --все нужные поля seminar
  NULL as idtest, NULL as testname --для всех полей показа test
from seminar where ....

union select 
  null as idseminar, null as nameseminar, --для всех полей показа из seminar
  test.id as idtest, test.tname as testname --все нужные поля из test
from test where ...
еще один вариант (позволит избежать ошибок в записи многочисленных null)
пскольку union требует правильного(!) и согласованного перечисления полей
Код:
select seminar.*, test.* 
from ( select 's' as tp, s.id from seminar as s where s.id in .... --составляем список семинаров c маркером s
   union select 't' as tp, t.id from test as t where t.id in ....   --добавляем список тестов с маркером t 
    ) as r --используем список как таблицу
left join seminar on seminar.id=r.id and r.tp='s' --присоединяем к каждому номеру семинара его же описание
left join test on test.id=r.id and r.tp='t'  --присоединяем к каждому номеру теста его же описание
конечно же * лучше заменить на список нужных полей
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 26.02.2014 в 17:05.
evg_m вне форума Ответить с цитированием
Старый 26.02.2014, 16:48   #16
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Суперпозиция как в #11 не фонтан - если будет уроков и тестов по 9 штук вернет 81 строку, а нужно 18. Вот для этого и UNION вместо суперпозиции
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.02.2014, 18:14   #17
Dagmanor
Пользователь
 
Регистрация: 26.02.2014
Сообщений: 26
По умолчанию

Сделал вот такой запрос:
Код:
SELECT seminar.id as id, seminar.group_id as gr, seminar.title as title ,seminar.description as descr,
 seminar.url as url, seminar.image as image, seminar."TYPE" as sem_type, null as test_guid
 from seminar WHERE seminar.id in (SELECT course_seminar.seminar_id from course_seminar WHERE course_seminar.course_id= 2 )
  union
  select test.id as id,  test.category as gr, test.short as title, test.property as descr, test.url as url,
   null as image, null as sem_type, test.guid as test_guid
   from test where test.id IN (select course_test.test_id from course_test WHERE course_test.course_id= 2)
Спасибо Вам большое!
Dagmanor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вложенный запрос GinIvan Помощь студентам 0 27.03.2012 13:01
Вложенный запрос Ti_pain) SQL, базы данных 2 17.12.2011 16:56
Delphi. TreeView. Firebird: Вложенный SQL-запрос. Alexei91 БД в Delphi 5 01.08.2010 08:04
Firebird 2.5. Группировка и вложенный запрос. Антон Ю.Б. SQL, базы данных 8 02.07.2010 17:22
вложенный запрос выборка по многим критериям Droid БД в Delphi 2 23.05.2010 19:31