Главная страница
    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 - это компонент доступа. Что менять хочешь?


 
Danilka ©   (2005-02-07 14:58) [41]

[39] eger"   (07.02.05 14:01)
> запрос нормальный - BDE его крутит в мгновение ока и результат
> соответсвует ожиданиям

О да, это, канечна, круто очень, однако про внешние соединения не почитал еще, не так-ли? outer join это внешнее соединение, нафига оно тебе здесь?
И вообще, всякие изи-табле, абсолюты и т.д., может стоит сначала разобрацца в терминологии, книжки умные почитать, СУБД под задачу выбрать, а уж затем программу лепить?


 
eger'   (2005-02-07 15:20) [42]

2 Sergey13 ©:
Да, можно сказать что путаю.
На самом деле вопрос простой - получить код, который можно распостранять без BDE, базу иметь одним файлом, желательно криптованным. Пусть БД будет сколь угодно экзотическая, главное, чтобы функцию свою выполняла.

2 Danilka © :
Неа, не читал. Сделал так как посоветовали, да и на самом деле и без outer пробовал, как выяснилось все работоспособно, просто  изи и абсолют не несут таких запросов, т.е. не могут их быстро отрабатывать.
Программа практически слеплена, а источник данных менять проблем не составляет. Исходные данные вообще в mdb лежат.... Разбираюсь на ходу.


 
Polad   (2005-02-07 16:05) [43]

Есть еще некий Advantage Database Server штука с Novell перекочевала.... можно гонять как серверный вариант так и локальный в случая с ADS это DataBase и FreeTables разработан был как движок для формата DBF потом приобрел свой формат ADT штука прикольная есть свои VCL компоненты для работы и редактор таблиц, (кстати довольно не плохой) много интересных вещей но есть и свои минусы, на мой взгляд лучше хорошо справится с небольшими локальными приложениями


 
Sergey13 ©   (2005-02-07 16:11) [44]

2[42] eger"   (07.02.05 15:20)
А чем например FireBird не устраивает? Или та же mdb, раз уже есть?


 
eger'   (2005-02-07 17:55) [45]

2 Polad:
Спасибо за совет!

2 Sergey13 ©:
>А чем например FireBird не устраивает? Или та же mdb, раз уже >есть?
все так-же привязка к дополнительному софту вне приложения... возможно, есть компоненты для работы с mdb, но я просто не искал...


 
Sergey13 ©   (2005-02-08 09:27) [46]

2[45] eger"   (07.02.05 17:55)
>все так-же привязка к дополнительному софту вне приложения...
Это как? Тебе ОС не мешает? 8-)


 
Danilka ©   (2005-02-08 09:35) [47]

[45] eger"   (07.02.05 17:55)
Угу. Значит, использование локального ADS это не есть "дополнительный софт вне приложения", а фиребирд эмбеддед, например, он самый и есть?


 
eger'   (2005-02-09 14:45) [48]

2 Sergey13 ©:
неа, не мешает. чего бы ей мешать?

2 Danilka ©:
Я просто ищу простое решение, чтобы компилилось в приложение. Стоит попробовать "фиребирд эмбеддед"?



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

Форум: "Базы";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.57 MB
Время: 0.038 c
1-1109645574
msgipss
2005-03-01 05:52
2005.03.13
Подскажите интерпретаторы для использования в Delphi 6 и выше


1-1109334999
ТехникПТО
2005-02-25 15:36
2005.03.13
Как в MessageDlg определить нажатие кнопки?


4-1107172813
BaDeVlad
2005-01-31 15:00
2005.03.13
Как вывести Unicode-строку?


14-1108664325
Palladin
2005-02-17 21:18
2005.03.13
Green Day - American Idiot


1-1109676753
dmitry81_2
2005-03-01 14:32
2005.03.13
Cannot create application object in shared object or library





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский