powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SELECT... FROM SELECT...
8 сообщений из 8, страница 1 из 1
SELECT... FROM SELECT...
    #36745427
uZverrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Есть таблица, в которой перечислены балансовые счета:
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
SELECT... FROM SELECT...
    #36745800
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SELECT... FROM SELECT...
    #36745802
Анонимус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
SELECT... FROM SELECT...
    #36746020
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анонимус, а по-моему, ваш вариант выдаст среди прочих и, например, 1002, чего не должно быть. Я не зря нарисовал второй джойн ;)
...
Рейтинг: 0 / 0
SELECT... FROM SELECT...
    #36746736
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
SELECT... FROM SELECT...
    #36746935
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SELECT... FROM SELECT...
    #36747455
uZverrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tangliruZverrrINSERT INTO bs values('100','105')наверное опечатались - тысяча и тысяча пять?

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


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