Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.26;
Скачать: CL | DM;

Вниз

Один DBGrid на двух Select   Найти похожие ветки 

 
Шурик Ш   (2002-09-05 15:52) [0]

А можно как-нибудь средствами языка SQL выполнить два Select"а "одновременно" (в одном запросе) так, чтобы на их основе образовать один DBGrid? С тем условием, что названия колонок и их типов одинаковые, да и строятся они, вообщем-то, по одной таблице, только по разным условиям.


 
Val ©   (2002-09-05 16:01) [1]

два Select"а "одновременно"
выражайтесь точнее, вы имеете ввиду union?


 
Виктор Щербаков ©   (2002-09-05 16:03) [2]


> да и строятся они, вообщем-то, по одной таблице, только
> по разным условиям.

Ну тогда объедини эти условия по OR.


 
Шурик Ш   (2002-09-05 16:35) [3]

Виноват! Сам не знаю чего хочу!


 
Val ©   (2002-09-05 17:24) [4]

это не особо помогает в решении проблемы. Не знаете что хотите - не задавайте вопроса. Не знаете как объяснить - другое дело - давайте начальные данные и желаемый результат.


 
Nikolai_S ©   (2002-09-05 17:33) [5]

Я думаю, что нужно 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


 
VAleksey ©   (2002-09-05 18:12) [6]

вообще для "С тем условием, что названия колонок и их типов одинаковые, да и строятся они, вообщем-то, по одной таблице, только по разным условиям."
используют конструкцию UNION ю Например
SELECT *
FROM Table1
WHERE ....
UNION
SELECT *
FROM Table1
WHERE ....

По желанию можно добавить Order By.
Но жто для локальных таблиц. Подробнее смотри LocalSQL.hlp.


 
ЮЮ ©   (2002-09-06 03:41) [7]

UNION ,вообще-то, нужен для объединения разных таблиц или формирования строк с "добавлением" разного значения в "дополнительное" поле.
А в данном случаем, возможно, хватит объединения условия выборки?


 
VAleksey ©   (2002-09-06 09:53) [8]

SELECT custno, company

FROM customers
UNION
SELECT custno, company

FROM old_customers
вместо old_customer можно поставить customer и изменить пункт WHERE :).


 
ЮЮ ©   (2002-09-06 10:04) [9]

to VAleksey © (06.09.02 09:53)
Автор : С тем условием, что названия колонок и их типов одинаковые, да и строятся они, вообщем-то, по одной таблице , только по разным условиям

Я: UNION ,вообще-то, нужен для объединения разных таблиц

ТЫ: :)

К вышесказанному могу ещё добавить,что UNION ещё нужен для объединения в одном поле разных полей одной и той же таблицы.


 
Nikolai_S ©   (2002-09-06 10:10) [10]

Зря мы спорим, если не знаем, что автор вопроса хочет. Он же сам сказал - не знает что хочет. Пускай сформулирует вопрос более конкретно. Ну а вообще зачем UNION, если таблица одна и та же. Можно просто условия через OR указать и все. Я понял, что ему нужно в DBGrid вывести две колонки, которые фактически представляют одно поле в заданной таблице, но условия, по которым отбираются значения в 1-ю и 2-ю колонки DBGrid - разные.


 
Val ©   (2002-09-06 10:30) [11]

извините, это клуб гаданий на кофейной гуще? ;)


 
Anatoly Podgoretsky ©   (2002-09-06 10:38) [12]

Запугали пачана своими гаданиями и советами :-)


 
Nikolai_S ©   (2002-09-06 10:42) [13]

Да автор вопроса уже в принципе не важен. Здесь уже интересная полемика пошла, автор только лишь посеял какое-то полусгнившее зерно, а в такой насыщенной почве что угодно прорастёт :-).

Этим мне этот форму и нравиться...


 
Шурик Ш   (2002-09-06 16:21) [14]

Пора внести ясность...
Смотрите...
Хочу получить:
Есть "деревянная" структура (дерево) в БД. Когда все ветви закрыты в 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, т.е. делать все это надо одним запросом.
Как?

А по поводу "полусгнившего семени", это Вы зря так.


 
Wolf226   (2002-09-06 16:43) [15]

Похоже прийдется делать хранимую процедуру


 
Шурик Ш   (2002-09-06 16:51) [16]

А если я работаю не с SQL, а с DBF, то где я ее буду хранить?


 
Val ©   (2002-09-06 17:01) [17]

в приложении


 
Шурик Ш   (2002-09-06 17:10) [18]

А что такое хранимая процедура?


 
Val ©   (2002-09-06 17:27) [19]

ХП - понятие клиент-серверной технологии работы с БД. В вашем случае - обыкновенные процедуры приложения. Выше имелось ввиду, что одним запросом задачу не решить.


 
Шурик Ш   (2002-09-06 17:52) [20]

Понял. Спасибо!


 
Nikolai_S ©   (2002-09-06 20:09) [21]

Тут не все так просто может быть как кажется. Можно конечно сделать запрос:

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

то они и будут выданы в таком порядке. По какому полю или критерию их отсортировать? В этом может быть проблема



Страницы: 1 вся ветка

Текущий архив: 2002.09.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.01 c
4-85739
denisX_555
2002-08-09 06:31
2002.09.26
Функция CreateProcessWithLogonW


14-85672
PDV
2002-08-30 15:16
2002.09.26
Скажите плиз CD-KEY для Delphi 5


1-85449
аксянов
2002-09-16 10:20
2002.09.26
обработчик


1-85441
Yaro
2002-09-15 22:08
2002.09.26
Hook на вызов API-функций


1-85433
XED
2002-09-15 19:52
2002.09.26
Нащет bat файлов!