![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Один DBGrid на двух Select [D6]
Шурик Ш © (2002-09-05 15:52:00)А можно как-нибудь средствами языка SQL выполнить два Select"а "одновременно" (в одном запросе) так, чтобы на их основе образовать один DBGrid? С тем условием, что названия колонок и их типов одинаковые, да и строятся они, вообщем-то, по одной таблице, только по разным условиям.
Nikolai_S (2002-09-06 20:09:00) [1]Тут не все так просто может быть как кажется. Можно конечно сделать запрос:
SELECT * FROM table WHERE (parent=0) or (parent=1)
Но где гарантия, что записи отсортируются правильно, т.е. что все будет выглядить так:
1
1.1
1.2
2
3
Если записи добавляли в таблицу в таком порядке:
1
2
1.1
1.2
3
1.3
то они и будут выданы в таком порядке. По какому полю или критерию их отсортировать? В этом может быть проблема
Шурик Ш (2002-09-06 17:52:00) [2]Понял. Спасибо!
Val (2002-09-06 17:27:00) [3]ХП - понятие клиент-серверной технологии работы с БД. В вашем случае - обыкновенные процедуры приложения. Выше имелось ввиду, что одним запросом задачу не решить.
Шурик Ш (2002-09-06 17:10:00) [4]А что такое хранимая процедура?
Val (2002-09-06 17:01:00) [5]в приложении
Шурик Ш (2002-09-06 16:51:00) [6]А если я работаю не с SQL, а с DBF, то где я ее буду хранить?
Wolf226 (2002-09-06 16:43:00) [7]Похоже прийдется делать хранимую процедуру
Шурик Ш (2002-09-06 16:21:00) [8]Пора внести ясность...
Смотрите...
Хочу получить:
Есть "деревянная" структура (дерево) в БД. Когда все ветви закрыты в DBGrid попадают только элементы верхнего уровня, благо есть поле Parent, которое говорит о пренадлежности родителю. Итак, выбираются все Parent = 0, получается:
1
2
3
4
5
Теперь я хочу представить развертывание дерева прямо в DBGrid. Т.е. развернутый узел помещает свои элементы прямо под собой. Пример - план счетов в 1С-предриятии 7.7, может кто видел.
Хочу получить:
1
1.1
1.2
1.3
2
3
4
5
Но хочу остаться в рамках DBGrid, т.е. делать все это надо одним запросом.
Как?
А по поводу "полусгнившего семени", это Вы зря так.
Nikolai_S (2002-09-06 10:42:00) [9]Да автор вопроса уже в принципе не важен. Здесь уже интересная полемика пошла, автор только лишь посеял какое-то полусгнившее зерно, а в такой насыщенной почве что угодно прорастёт :-).
Этим мне этот форму и нравиться...
Anatoly Podgoretsky (2002-09-06 10:38:00) [10]Запугали пачана своими гаданиями и советами :-)
Val (2002-09-06 10:30:00) [11]извините, это клуб гаданий на кофейной гуще? ;)
Nikolai_S (2002-09-06 10:10:00) [12]Зря мы спорим, если не знаем, что автор вопроса хочет. Он же сам сказал - не знает что хочет. Пускай сформулирует вопрос более конкретно. Ну а вообще зачем UNION, если таблица одна и та же. Можно просто условия через OR указать и все. Я понял, что ему нужно в DBGrid вывести две колонки, которые фактически представляют одно поле в заданной таблице, но условия, по которым отбираются значения в 1-ю и 2-ю колонки DBGrid - разные.
ЮЮ (2002-09-06 10:04:00) [13]to VAleksey © (06.09.02 09:53)
Автор : С тем условием, что названия колонок и их типов одинаковые, да и строятся они, вообщем-то, по одной таблице, только по разным условиям
Я: UNION ,вообще-то, нужен для объединения разных таблиц
ТЫ: :)
К вышесказанному могу ещё добавить,что UNION ещё нужен для объединения в одном поле разных полей одной и той же таблицы.
VAleksey (2002-09-06 09:53:00) [14]SELECT custno, company
FROM customers
UNION
SELECT custno, company
FROM old_customers
вместо old_customer можно поставить customer и изменить пункт WHERE :).
ЮЮ (2002-09-06 03:41:00) [15]UNION ,вообще-то, нужен для объединения разных таблиц или формирования строк с "добавлением" разного значения в "дополнительное" поле.
А в данном случаем, возможно, хватит объединения условия выборки?
VAleksey (2002-09-05 18:12:00) [16]вообще для "С тем условием, что названия колонок и их типов одинаковые, да и строятся они, вообщем-то, по одной таблице, только по разным условиям."
используют конструкцию UNION ю Например
SELECT *
FROM Table1
WHERE ....
UNION
SELECT *
FROM Table1
WHERE ....
По желанию можно добавить Order By.
Но жто для локальных таблиц. Подробнее смотри LocalSQL.hlp.
Nikolai_S (2002-09-05 17:33:00) [17]Я думаю, что нужно LEFT (RIGHT) JOIN использовать в данном случае:
SELECT T1.NAME, T1.MyField, T2.MyField FROM
(SELECT * FROM MyTable WHERE <условие на первую колонку>) AS T1 LEFT JOIN (SELECT * FROM MyTable WHERE <условие на вторую колонку>) AS T2 ON T1.КлючевоеПоле=T2.КлючевоеПоле
ORDER BY T1.NAME
Val (2002-09-05 17:24:00) [18]это не особо помогает в решении проблемы. Не знаете что хотите - не задавайте вопроса. Не знаете как объяснить - другое дело - давайте начальные данные и желаемый результат.
Шурик Ш (2002-09-05 16:35:00) [19]Виноват! Сам не знаю чего хочу!
Виктор Щербаков (2002-09-05 16:03:00) [20]
> да и строятся они, вообщем-то, по одной таблице, только
> по разным условиям.
Ну тогда объедини эти условия по OR.