Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SELECT... FROM SELECT... / 8 сообщений из 8, страница 1 из 1
16.07.2010, 15:46
    #36745427
uZverrr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT... FROM SELECT...
Всем привет.
Есть таблица, в которой перечислены балансовые счета:
create table bs(bal_s c(4))
INSERT INTO bs values('1000')
INSERT INTO bs values('1001')
INSERT INTO bs values('1002')
INSERT INTO bs values('1003')
INSERT INTO bs values('1005')
INSERT INTO bs values('1060')
INSERT INTO bs values('1072')
INSERT INTO bs values('1080')

и вторая таблица, где перечислены диапазоны балансовых счетов:
create table range_bs(bs1 c(4), bs2 c(4))
INSERT INTO bs values('100','105')
INSERT INTO bs values('1070','1073')
INSERT INTO bs values('1001','')
INSERT INTO bs values('1002','')

Задача: из таблицы BS выбрать все счета, которые входят в диапазоны из таблицы RANGE_BS за исключением счетов из таблицы RANGE_BS у которых нет второго значения.
Реализовать надо только селектами, желательно одним селектом(или поменьше).

Результатом при таких данных была бы выборка:
1000
1003
1005
1072
ЗЫ: сразу извиняюсь, что на выходных может не смогу ответить при необходимости)))
...
Рейтинг: 0 / 0
16.07.2010, 18:26
    #36745800
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT... FROM SELECT...
uZverrrINSERT INTO bs values('100','105')наверное опечатались - тысяча и тысяча пять?
Как-то так:
Код: plaintext
1.
2.
sele bal_s from bs 
inner join range_bs on between(bs.bal_s,bs1,bs2)
inner join (select bs1 from range_bs where !empty(bs2)) t0 on bal_s.id=t0.id
если диапазоны могут перекрываться, добавить distinct.
...
Рейтинг: 0 / 0
16.07.2010, 18:28
    #36745802
Анонимус
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT... FROM SELECT...
Код: plaintext
select distinct bs.bal_s from bs, range_bs as rb where val(bs.bal_s) between val(rb.bs1) and val(rb.bs2) and !empty(rb.bs1) and !empty(rb.bs2)
...
Рейтинг: 0 / 0
16.07.2010, 22:41
    #36746020
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT... FROM SELECT...
Анонимус, а по-моему, ваш вариант выдаст среди прочих и, например, 1002, чего не должно быть. Я не зря нарисовал второй джойн ;)
...
Рейтинг: 0 / 0
17.07.2010, 23:24
    #36746736
thunder2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT... FROM SELECT...
tanglir,
Ваш SELECT так и не смог запустить. Зато вариант Анонимус надо дополнить
DELETE sel1 FROM range_bs where EMPTY(range_bs.bs2) AND sel1.bal_s==range_bs.bs1
Тогда получаем в точности искомый результат.
Корректность применения BETWEEN к строкам сомнительна.
BETWEEN('1000','100','105') даст .T.
BETWEEN('1000','10','105') даст .T., и т.д.

Если такое поведение допустимо, то вперед с песней.
...
Рейтинг: 0 / 0
18.07.2010, 11:23
    #36746935
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT... FROM SELECT...
thunder2tanglir,
Ваш SELECT так и не смог запустить.Да это я там понаписал всякой чуши :) Вот рабочий вариант
Код: plaintext
1.
2.
sele distinct bal_s from bs ;
inner join range_bs on between(VAL(bs.bal_s),VAL(bs1),VAL(bs2));
left join (select bs1 from range_bs where empty(bs2)) t0 on VAL(bs.bal_s)=VAL(t0.bs1) where ISNULL(t0.bs1)
...
Рейтинг: 0 / 0
19.07.2010, 08:38
    #36747455
uZverrr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT... FROM SELECT...
tangliruZverrrINSERT INTO bs values('100','105')наверное опечатались - тысяча и тысяча пять?

Не опечатка. Именно так - с тремя символами. А может быть и 2 символа и один.
Вообще, т.к. все поля строковые, то могут быть и буквы, так что VAL() в селектах недопустим.
...
Рейтинг: 0 / 0
19.07.2010, 09:09
    #36747466
uZverrr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT... FROM SELECT...
tanglir, ваш последний вариант имеет право жить :)
Спасибо. Теперь только на реальных данных обкатать надо.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SELECT... FROM SELECT... / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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