Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объединение таблиц, ADO+SQL 
:(
    Опции темы
Ksen
Дата 20.9.2006, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Всем привет!)
Использую ADO....Подскажите, пожалуйста, с помощью какой команды можно объединить 2 таблицы?
Пробовала INNER JOIN, но у меня почему-то при активации Query ошибка "Incorrect syntax near the keyword "INNER"
В ACCESS команда, которая мне нужна называется RIGHT JOIN......

Привожу код запроса)) на всякий пожарный...
Код

SELECT objects_mon.*, object_statuses.*, enterprises.*
FROM objects_mon, object_statuses, INNER JOIN enterprises ON (objects_mon.enterprise_id=enterprises.enterprise_id)
WHERE (objects_mon.object_status_id = object_statuses.object_status_id)
AND (flag_del = 0)

PM MAIL ICQ   Вверх
Rodman
Дата 20.9.2006, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Так у тебя в запросе 3 таблицы обьединяются...

Добавлено @ 11:49 
object_statuses тоже надо прописать INNER JOIN
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Savek
Дата 20.9.2006, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



Насколько я помню нужно писать

LEFT INNER JOIN
RIGHT INNER JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN

PM MAIL   Вверх
Rodman
Дата 20.9.2006, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Цитата(Savek @  20.9.2006,  13:12 Найти цитируемый пост)
LEFT INNER JOIN
RIGHT INNER JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN

так пишут в случае лево-  или правостороннего обьединения...


Ksen  выпиши свои названия таблиц и поля по которым ты делаешь обьединение... я попробую переделать...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Ksen
Дата 20.9.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Получилось)) но немного не то, что я хотела....сейчас почему-то запрос выбирает все записи в которых есть enterprise_id....а у меня бывают такие ситуации, что нет enterprise_id, т.е. в поле пустота....как быть? Нужны все записи...

Savek, почему-то с RIGHT INNER JOIN ругается "Incorrect syntax near the keyword "INNER"

Код

SELECT objects_mon.*, object_statuses.object_status_name, enterprises.enterprise_name
FROM enterprises INNER JOIN (object_statuses INNER JOIN objects_mon ON object_statuses.object_status_id=objects_mon.object_status_id) ON objects_mon.enterprise_id=enterprises.enterprise_id
WHERE object_statuses.object_status_id=objects_mon.object_status_id
and (flag_del = 0)


Чего не правильно? подскажите....плиз))

Добавлено @ 14:08 
Rodman, мне по идее и нужно правостороннее соединение...
я попробовала создать запрос в аксес с простецкой базой, код получился такой 
Код

SELECT Таблица1.id_wq, Таблица1.id, Таблица4.name, Таблица1.next, Таблица1.ass, Таблица1.id2, Таблица2.name2
FROM Таблица4 RIGHT JOIN (Таблица2 RIGHT JOIN Таблица1 ON Таблица2.id2 = Таблица1.id2) ON Таблица4.id = Таблица1.id;

PM MAIL ICQ   Вверх
Rodman
Дата 20.9.2006, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Цитата(Ksen @  20.9.2006,  14:01 Найти цитируемый пост)
сейчас почему-то запрос выбирает все записи в которых есть enterprise_id
 если ты используешь RIGHT или LEFT то выбираются поля или все из всех таблиц, либо только данные которые есть в одно таблице.... в зависимости от направления (RIGHT или LEFT )



-------------------------------------------------------


ну по тексту запроса я много сказать не могу, но вижу что он правильнее стал...

если можешь, заведи базу в Microsoft Access и там есть есть возможность визуального конструирования запросов... просто выбираешь таблицы, а потом поля которые тебе необходимо выводить...

все обьединения сами прописываются... (можно и SQL запрос потом оттуда выудить)...

Добавлено @ 14:17 
а условие 
Код

WHERE object_statuses.object_status_id=objects_mon.object_status_id
and (flag_del = 0)


можешь дописать в конце, но "точка с запятой" должны быть в самом конце...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Ksen
Дата 20.9.2006, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата
Ksen  выпиши свои названия таблиц и поля по которым ты делаешь обьединение... я попробую переделать...


есть общая таблица с данными objects_mon и есть два справочника object_statuses и enterprises
Нужно чтоб запрос выбирал все записи из таблицы objects_mon у которых flag_del = 0, а к полям enterprise_id и object_status_id подставлялись соответствующие наименования из справочников....т.е. object_status_name, enterprise_name....но нужно учесть что в таблице  objects_mon в поле enterprise_id может быть пусто....но запись эта нужна....

Добавлено @ 14:41 
Цитата
если можешь, заведи базу в Microsoft Access и там есть есть возможность визуального конструирования запросов... просто выбираешь таблицы, а потом поля которые тебе необходимо выводить...

полностью базу я там с эмитировать не могу.....подобную сделала....и по этому подобию запрос и писала....

Добавлено @ 14:44 
Rodman,  smile  что-то я в хелпе Delphi даже найти не могу какие функции поодерживаются в SQL....ADO....
PM MAIL ICQ   Вверх
Ksen
Дата 20.9.2006, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



почему на RIGHT INNER JOIN ругается "Incorrect syntax near the keyword "INNER"???? непонимаю...

Добавлено @ 15:21 
Получилось!!!!!!! Оказывается, если используешь правостороннее или левостороннее соединение то пишется RIGHT JOIN или LEFT JOIN без INNER!!! Поэтому и ошибка была!!
PM MAIL ICQ   Вверх
Rodman
Дата 20.9.2006, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Поздравляю...

Чем долше мучаешься, тем больше научишься...

Если надо че нить по базам - пеши... smile 
PM MAIL WWW Skype GTalk YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.