Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Один DBGrid на двух Select [D6]


Страницы:   1 2

Шурик Ш ©   (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.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо