Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.042 c
6-1104840240
Bork
2005-01-04 15:04
2005.03.13
как скачать файл по http?


3-1107902461
TechnoDreamer
2005-02-09 01:41
2005.03.13
Порядок записей в TADODataSet


8-1100687392
Viktop
2004-11-17 13:29
2005.03.13
Как повернуть изображение


4-1107150649
Progh
2005-01-31 08:50
2005.03.13
Получить имя процесса, по хандлу окна


9-1102781087
Макс
2004-12-11 19:04
2005.03.13
Как обновить glscene.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский