Форум: "Базы";
Текущий архив: 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