Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Запрос в Access с JOIN / 5 сообщений из 5, страница 1 из 1
30.11.2012, 17:15
    #38060236
Hruches
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Access с JOIN
Пишу на delphi древовидную структуру.

2 таблицы: Узел: "ID, название", Структура: "PID, To, From, Dis" (пид - уникальный, фром- текущий узел, ту- дочерний узел, дис - дистанция между узлами)

нужно найти все верхние узлы(листья, без подчиненных) для любого узла. ID "любого узла" записывается в Edit1.text

Наработка:

select * from 1 as ee inner join 2 as ee1
ON ee1.fromm = ee.id
WHERE ee1.to = '+trim(Edit1.Text)+' AND ee1.dis > 0
inner join ( select * from 1 as ee left join 2 as ee1)
ON ee1.to = ee.id WHERE to IS NULL

Поясню: выделить все листья в БД, выделить все подчиненные узлу Edit1.text, объединить по полю ID и To, там где не будет to(нет потомков, подчиненных), те и есть листья.

Вопрос, есть ли вариант эффективнее(структура бд неприкосновенна)?
Вопрос, синтаксис запроса хромает на обе ноги, скорее всего нужно просто скобки проставить и прочее.
...
Рейтинг: 0 / 0
30.11.2012, 17:16
    #38060240
Hruches
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Access с JOIN
СУБД - ACCESS
...
Рейтинг: 0 / 0
01.12.2012, 13:14
    #38060989
Hruches
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Access с JOIN
Всем спасибо.

select aa, nam from (
SELECT Count(id) as aa, nam FROM (
select * from 1 as ee inner join 2 as ee1
ON ee1.fromm = ee.id WHERE ee1.to = 1 AND nam is not null and ee1.dis > 0

union select * from 1 as ee left join 2 as ee1
ON ee1.to = ee.id WHERE to IS NULL )
GROUP BY nam ) where aa=2

вопрос про то, как можно это сделать без подзапроса в силе.
...
Рейтинг: 0 / 0
03.12.2012, 04:36
    #38062083
Запрос в Access с JOIN
Hruchesвопрос про то, как можно это сделать без подзапроса в силе.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT Count(id) as aa, nam 
  FROM (
         select * 
           from 1 as ee 
          inner join 2 as ee1
             ON ee1.fromm = ee.id 
          WHERE ee1.to = 1
            AND nam is not null
            and ee1.dis > 0
         UNION 
         select * 
           from 1 as ee 
           left join 2 as ee1 
             ON ee1.to = ee.id 
          WHERE to IS NULL 
       )
  GROUP BY nam 
 having count(id) = 2

???
...
Рейтинг: 0 / 0
03.12.2012, 21:37
    #38063435
Hruches
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Access с JOIN
Вариант рабочий, согласен. Красивее.
...
Рейтинг: 0 / 0
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Запрос в Access с JOIN / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]