![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сформировать запрос в TQuery [D5, dBase, FoxPro]
SZap © (2002-08-08 13:34:00)у меня 3 таблицы: накладные, товары, изменения цен...
- в каждой накладной несколько товаров (обязательно)
- в таблице "изменения цен" может быть от 0 (т.е. небыть) до 3 записей (с разными ценами)
необходимо сформировать список состоящий из всех товаров с последней ценой из таблицы "изменения цен" (главное, чтобы товары неповторялись)
elv (2002-08-09 14:03:00) [1]МАРТИН ГРУБЕР "Понимание SQL"
SaS13 (2002-08-09 13:58:00) [2]SZap (09.08.02 13:51)
Стандарт SQL-92 синтаксис читай в MSDN.
SZap (2002-08-09 13:51:00) [3]SaS13:
я использую TQuery с локальными .dbf
SaS13 (2002-08-09 13:46:00) [4]И еще, очень буду благодарен за ссылку на описание синтаксиса SQL (именно для TQuery)...
Какой стандарт поддерживает твоя СУБД, такой и TQuery.SQL
SZap (2002-08-09 13:39:00) [5]с двумя таблицами все получается класно, но когда подсоединяю третью какаято фигня: когда в Т3 нет записи то эти товары неотображает :(. Также непонятно как сделать, чтоб если в Т3 на товар более одной записи выбиралась только одна, Т3.П3 которой имеет большее значение.
Пока сделал все перебором через TTable но это так долго...
И еще, очень буду благодарен за ссылку на описание синтаксиса SQL (именно для TQuery)...
ЮЮ (2002-08-09 03:06:00) [6]Предлагаю часть вычислений перенести на клиента, т.к. Local SQL - это Local SQL. Т.е. запрос возвращает записи:
[поля из таблицы Товары (t2)] [Цена1] [Цена2] [Цена3],
где поля запроса [Цена1] [Цена2] [Цена3] могут быть и Null, а на клиенте - в вычислимом поле - уже определиться, какая цена нас интересует
elv (2002-08-08 20:13:00) [7]SZap
elv, SaS13: в таблице товаров - товары повторяются
все класно, спасибо, много сказано, но я почти ничего НЕПОНЯЛ :(
может чтото уточнить?
Ты нам мешаешь :)
А если серьезно, ты попробовал применить советы на практике?
elv (2002-08-08 20:12:00) [8]SaS13
даже если нет, то distinct"ом в данном случае будет выбираться объединение множеств t2 и t3, за исключением разве что если встретятся одинаковые товар и цена, т.е. для каждого товара из t2 будет браться цена из t3, с фильтрацией связок Товар-Цена
Человеку надо отобрать список товаров без повторений с последней ценой. В t2 список товаров дублируется. Так? Каждый товар имеет цену. Если товар одинаковый, он имеет одинаковую цену. Почему distinct не поможет? Наверное я не правильно понял структуру/задачу.
Конечно запрос можно оптимизировать и выиграть несколько милсек.
SZap (2002-08-08 17:22:00) [9]elv, SaS13: в таблице товаров - товары повторяются
все класно, спасибо, много сказано, но я почти ничего НЕПОНЯЛ :(
может чтото уточнить?
SaS13 (2002-08-08 16:50:00) [10]А разве в таблице товаров есть _одинаковые_ товары?
Я думал,что есть таблица товаров t2, есть таблица цен t3. Т.е. связь один ко многим.
даже если нет, то distinct"ом в данном случае будет выбираться объединение множеств t2 и t3, за исключением разве что если встретятся одинаковые товар и цена, т.е. для каждого товара из t2 будет браться цена из t3, с фильтрацией связок Товар-Цена
elv (2002-08-08 16:43:00) [11]Нет ты не понял: записи берутся из двух (минимум) таблиц, и там и там есть товар
А разве в таблице товаров есть _одинаковые_ товары?
Я думал,что есть таблица товаров t2, есть таблица цен t3. Т.е. связь один ко многим.
SaS13 (2002-08-08 16:41:00) [12]
> Johnmen © (08.08.02 16:38)
Сорри, поправочка:
select t1.p1, Sum(t2.p2)
...
group by t1.p1
Johnmen (2002-08-08 16:38:00) [13]>SaS13 © (08.08.02 16:28)
>select t1.p1, t2.p2
>...
>order by t1.p1
Повторяюсь, но это неверный вид запроса по сути...
SaS13 (2002-08-08 16:28:00) [14]To: elv
Нет ты не понял: записи берутся из двух (минимум) таблиц, и там и там есть товар, поэтому если писать:
select distinct t1.p1, t2.p2
то будут выбираться все записи, даже если t1.p1 одинаково, но t2.p2 - разные
а если написать:
select t1.p1, t2.p2
...
order by t1.p1
то записи сгруппируются по t1.p1 и не будет двух записей с одинаковыми t1.p1
elv (2002-08-08 16:22:00) [15]distinct не катит, записи то разные
Если они разные, тогда не будет разницы использовать distinct или нет.
SaS13 (2002-08-08 16:10:00) [16]
> elv © (08.08.02 16:08)
distinct не катит, записи то разные
elv (2002-08-08 16:08:00) [17]SZap (08.08.02 15:38)
elv: а они повторяются, какже без этого...
Select Distinct ...
P.S. Мне кажется проект недоработан.
Johnmen (2002-08-08 15:58:00) [18]Допавлю к вскидке SaS13 © (08.08.02 15:45) :
1. не JOIN, а RIGHT JOIN в данном контексте
2. группировка по тем полям, кот. в select, значит извратимся
select t2.p2, sum(t2.p5)
SaS13 (2002-08-08 15:45:00) [19]на вскидку, могут быть ошибки:
select t2.p2, t3.p5
from t2 join t3 on t3.p1 = t2.p1 and t3.p2 = t2.p2 and t3.p3 in (select max(tbl3.p3) from t3 as tbl3 where tbl3.p1 = t2.p1 and tbl.p2 = t2.p2)
group by t2.tovar
SZap (2002-08-08 15:38:00) [20]elv: а они повторяются, какже без этого...