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

Вниз

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

 
eger'   (2005-02-02 10:43) [0]

Уважаемые! Как выташить поле из другой таблицы соеденив его с результатом запроса. Пример: есть табли поставщиков и заказов им. Естественно в обоих есть поля связи. В результате хочется иметь ответ в виде - имя поставщика, № заказа, дата, сумма. Типа того. Как не пробовал всякие join ничего не получается. Подскажите ради бога.


 
P.N.P. ©   (2005-02-02 10:50) [1]

Нарисуй структуру таблиц


 
eger'   (2005-02-02 10:53) [2]

Suppliers - поля SupplierNo (autoinc), Name (String),...
Orders - поля Index (autoinc), SupplierNo (SmallInt), OrderNo,...


 
Соловьев ©   (2005-02-02 10:56) [3]


> Как не пробовал всякие join ничего не получается.

Как пробовал?


 
P.N.P. ©   (2005-02-02 10:58) [4]

Ну и..
select s.name,o.date,o.OrderNo
from suppliers s
left outer join Orders o on o.SupplierNo=s.SupplierNo


 
P.N.P. ©   (2005-02-02 11:00) [5]

а с суммой
select s.name,o.date,o.OrderNo,sum(o.cena)
from suppliers s
left outer join Orders o on o.SupplierNo=s.SupplierNo
group by
s.name,o.date,o.OrderNo

а в самом деле, покажи как делаешь?


 
Соловьев ©   (2005-02-02 11:00) [6]


> SupplierNo (SmallInt),

потенциальная ошибка


 
Sergey13 ©   (2005-02-02 11:01) [7]

Если не нужны поставщики без заказов, зачем джойнить?
select *
from Suppliers,Orders
where Orders.SupplierNo=Suppliers.SupplierNo


 
P.N.P. ©   (2005-02-02 11:05) [8]

>Sergey13 ©   (02.02.05 11:01) [7]
а вдруг нужны =)
тем более еще и сумма какая-то нужна.
будем ждать автора.


 
msguns ©   (2005-02-02 11:11) [9]

Если судить по сабжу внимательно, то вот это:

"Уважаемые! Как выташить поле из другой таблицы соеденив его с результатом запроса"

дает основание предположить, что ему надо вытащить попутную информацию из других таблиц по полям, полученным именно в запросе. Т.е. речь должна итти либо о ХП (их есть в изи ?), либо о вложенном запросе (их могут быть в изи ?)

Хотя манера автора выражения своих мыслей такова, что можно делать совершенно разные предположения, в т.ч. взаимоисключающие


 
eger'   (2005-02-02 21:26) [10]

Во первых, спасибо всем за ответы! Жаль что не мог ранее написать. Много работы.

2 all
я первый раз столкнулся с join так что пробовал всяко. Как посоветовали как раз не делал. Я попробую и скажу что у меня получилось.

2 Соловьев ©  
Почему > SupplierNo (SmallInt), - потенциальная ошибка? Поставщиков не будет более нескольких десятков никогда!

2 msguns ©
Вы все правильно поняли. На всякий случай изложу подробнее: мне нужно вытащить наименование поставщика с каждой записью заказа. вот и все. возможно еще отбор заказов по сумме (от и до некой суммы). т.е. первичным отбором явл. таблица заказов, а поле "наименование поставщ." должно идти в каждой выводимой строке заказа(отбор от и до некой суммы по всем заказам).


 
Anatoly Podgoretsky ©   (2005-02-02 23:26) [11]

on S.SupplierNo=O.SupplierNo


 
Sergey13 ©   (2005-02-03 09:21) [12]

2[8] P.N.P. ©   (02.02.05 11:05)
>а вдруг нужны =)
>будем ждать автора.

[10] eger"   (02.02.05 21:26)
>мне нужно вытащить наименование поставщика с каждой записью заказа.

Я был прав. Не нужен джоин. 8-)


 
eger'   (2005-02-03 12:43) [13]

2 all:
на самом деле, сработали ваши советы. да и то, что делал я, тоже наверое сработало бы. просто изя тормозит на запросах такого вида просто жуть, посему я считал, что она висит и скидывал sqlconsole. это просто ужас как долго.
а нельзя сделать вложенный запрос - сперва отобрать нужные записи из Orders, а затем к ним прицепить наименования из Suppliers? Как?


 
Sergey13 ©   (2005-02-03 12:47) [14]

Если заказов сотни тысяч, то тормозить будет любой сервер, не то что "легкие таблицы". Может просто выборку ограничить нужным?


 
Соловьев ©   (2005-02-03 12:52) [15]


> Поставщиков не будет более нескольких десятков никогда!

ну-ну.. а то что SupplierNo (autoinc) больше 32 767 не станет. ты даешь 100% или ты не знаешь про внешние ключи?


 
eger'   (2005-02-03 13:03) [16]

2 Соловьев ©:
абсолютно (не более нескольких десятков). про внешние ключи не знаю....

2 Sergey13 ©:
Дак есть чем ограничить. буквально до 50-500 результатов. все равно она не несет этого, как только еще и наименование нужно брать из Supliers. А так выборку делает мигом. Можно вложенный сделать? Или просто легче на все это плюнуть, заменить DBGrid на просто Grid и заполнять его ручками, взяв резутьлат отбора, присабачивая к нему наименование... как думаете?


 
Sergey13 ©   (2005-02-03 13:08) [17]

При таких запросах еще индексы здорово рулят обычно.


 
eger'   (2005-02-03 13:09) [18]

2 Соловьев ©  :
Я понял про что Вы. Нет, на самом деле список поставщиков практически не меняется, так что в ближайшие сто лет SupplierNo (autoinc)вряд ли дойдет до 1000.
Кстати что-то стало работать после того, как я в обоих таблицах сделал типы SupplierNo = Integer...


 
Соловьев ©   (2005-02-03 13:10) [19]


> абсолютно (не более нескольких десятков).

та хоть один. Представь себе что, сидит юзверь и создает Поставщика. потом удаляет и т.д. Ну и в конце концов, переваливат за 32767 и ты уже не сможешь в деталь-таблицу поставить связку.


> про внешние ключи не знаю....

читай и сделай, убережешь свою БД от нецелостности.


 
eger'   (2005-02-03 13:11) [20]

2 Sergey13 ©  :
попробую поиграться с ними. я так понимаю лучше проиндексировать и там и там SupplierNo?


 
Соловьев ©   (2005-02-03 13:13) [21]


> попробую поиграться с ними. я так понимаю лучше проиндексировать
> и там и там SupplierNo?

если будет внешний ключ, то не надо ничего индексировать. так как ПК и ФК уже имеют системные индексы.


 
Sergey13 ©   (2005-02-03 13:15) [22]

2[20] eger"   (03.02.05 13:11)
Обычно индексируют то с чем соединяют и то по чему сортируют.


 
Sergey13 ©   (2005-02-03 13:16) [23]

2[21] Соловьев ©   (03.02.05 13:13)
ИМХО ты желаемое выдаешь за действительное. Особенно по части ФК. 8-)


 
eger'   (2005-02-03 13:17) [24]

2 Соловьев ©  :
юзверям не позволено их создавать. список просто "заколочен", такая специфика. только заказы создаются.


 
eger'   (2005-02-03 13:20) [25]

2 Соловьев ©  :
что есть ПК и ФК?


 
P.N.P. ©   (2005-02-03 13:29) [26]

>что есть ПК и ФК?
PK = Primary key = первичный ключ
FK = Foreign key = внешний ключ

К стати, до сих пор не упямянулась СУБД.


 
eger'   (2005-02-03 13:35) [27]

2 P.N.P. ©  :
>PK = Primary key = первичный ключ
>FK = Foreign key = внешний ключ
Ааа..

>К стати, до сих пор не упямянулась СУБД.
Як жеж не упоминалась - Easy Table 6.03


 
P.N.P. ©   (2005-02-03 14:22) [28]

> Easy Table 6.03
Надо же, я и не знал про него раньше,
занятная вещица..


 
eger'   (2005-02-03 19:43) [29]

2 P.N.P. © :
что можете про нее сказать? я искал замену DBE, пока остановился на этом варианте...


 
Соловьев ©   (2005-02-03 19:46) [30]


> я искал замену DBE, пока остановился на этом варианте...

BDE?
Firebird, MSDE.


 
eger'   (2005-02-03 20:15) [31]

2 Соловьев ©  :
я неверное выразился, и получил соотв. ответ. не замену BDE  я искал, а нечто, что может компилиться в код самого приложения.

2 all:
проиндескировал связанные поля, а также поля по которым идет отбор в обоих таблицах. скорость выросла, но все равно слишком неприемлема. можно все таки сделать вложенный запрос?
>сперва отобрать нужные записи из Orders, а затем к ним
> прицепить наименования из Suppliers? Как?


 
Anatoly Podgoretsky ©   (2005-02-03 21:53) [32]

eger"   (03.02.05 13:09) [18]
Кстати что-то стало работать после того, как я в обоих таблицах сделал типы SupplierNo = Integer...

Integer оптимизирован по скорости работы. Размер особо не должен волновать, он просто ничто по сравнению с общим размером.


 
ЮЮ ©   (2005-02-04 04:05) [33]

>скорость выросла, но все равно слишком неприемлема. можно все таки сделать вложенный запрос?

Для начала показал бы текст медленного запроса.
Ибо, если "А так выборку делает мигом", а связывание со второй таблицей приводит к тормозам, то проблема или ав запросе или нашел неважную замену БДЕ, ибо даже он так не тупит :)


 
eger'   (2005-02-04 15:41) [34]

2 ЮЮ ©  :
> select s.name,o.date,o.OrderNo
> from Orders o
> left outer join suppliers s on o.SupplierNo=s.SupplierNo
здесь что-то не так?


 
Sergey13 ©   (2005-02-04 15:46) [35]

2[34] eger"   (04.02.05 15:41)
> здесь что-то не так?
Шрифт не нравится?


 
eger'   (2005-02-04 16:14) [36]

2 Sergey13 © :
lol
вообще, текст запроса правильный?


 
Sergey13 ©   (2005-02-07 09:17) [37]

2[36] eger"   (04.02.05 16:14)
>вообще, текст запроса правильный?
Вопрос философский. 8-)
Если ошибку не выдает, значит синтаксически правильный. Если еще и результат правильный - значит запрос просто правильный. Если еще и работает быстро - запрос просто хорош.


 
Danilka ©   (2005-02-07 09:35) [38]

[34] eger"   (04.02.05 15:41)
Посмотри в описании sql про джойны, в частности про outer.

[37] Sergey13 ©   (07.02.05 09:17)
:))


 
eger'   (2005-02-07 14:01) [39]

2 all:
запрос нормальный - BDE его крутит в мгновение ока и результат соответсвует ожиданиям. Если кто знает, что можно использовать вместо BDE (только чтоб компилилось в приложение) и чтобы работало хоть сколь-нибудь похоже на работу BDE, поделитесь. Easy Table и Absolute Database критики не выдерживают.... опробовано.


 
Sergey13 ©   (2005-02-07 14:14) [40]

2[39] eger"   (07.02.05 14:01)
Ты по моему путаешь БД и компоненты доступа к БД.
Easy Table и Absolute Database - это вроде БД такие экзотические, а BDE - это компонент доступа. Что менять хочешь?



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

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

Наверх




Память: 0.56 MB
Время: 0.054 c
3-1107277551
UVV
2005-02-01 20:05
2005.03.13
DataSource.DataSet.IsEmpty


1-1109654407
Alex7
2005-03-01 08:20
2005.03.13
Поиск компонента


14-1108747330
mrQ
2005-02-18 20:22
2005.03.13
Аудио книги


1-1109762690
ser35
2005-03-02 14:24
2005.03.13
Игнорирование невидимых компонентов


1-1109420012
ser35
2005-02-26 15:13
2005.03.13
как отобразить данные комбобоксов?