|
|
|
Paradox и сложный запрос таблицам.
|
|||
|---|---|---|---|
|
#18+
Доброго всем времени суток. Позвольте задать вопрос. Работаю с paradox7. В нем имеется база для простоты, к примеру, с двумя табличками: company -------- ID_company - autoincrement - PK Name - alpha(255) FIO - alpha(255) Pozition_ID - longint - FK (pozition) Adres - alpha(255) Phone - alpha(30) Site - alpha(255) Mail - alpha(255) pozition ------- ID_pozition - autoincrement - PK Name - alpha(255) При этом в таблице company поле Pozition_ID - не обязательное. Иными словами там или NULL, или айди совпадающий с номером из второй таблицы. Необходимо вывести в селекте, например, информацию о компаниях на букву "А". При этом в некоторых из них поля FIO (ФИО начальника) и Pozition_ID (название его должности из второй таблицы) заполнены, а в некоторых - нет. если запрос строю так: SELECT distinct company.Name, company.FIO, pozition.Name, company.Adres, company.Phone, company.Site, company.Mail FROM company, pozition WHERE company.Name like 'A%' ORDER by company.Name то результат не верен. Оговорюсь, что компаний, отвечающих данному условию (название начинается с буквы "А") в моей базе всего две - одна с указанным ФИО и должностью, вторая - без. При этом в таблице pozition имеются 24 разных должности. Запрос отрабатывает и возвращает 2 * 24 = 48 результатов, где сначала идет информация о первой компании (с меняющимися 24 разными должностями), а потом то же самое про вторую компанию. И не важно, заполненны ли поля FIO и Pozition_ID или нет. Можно, конечно, переписать условия выборки так: WHERE company.Name like 'A%' and company.Pozition_ID = pozition.ID_pozition чтобы пказать все строчки, где поля заполнены и так: WHERE company.Name like 'A%' and company.Pozition_ID IS NULL чтобы вторым запросом вывести остальных, но в моей базе в таблице company таких полей со ссылкой на другие таблицы не одно, а целых пять ( я лишь для простоты указал здесь один форинкей). Подскажите пожалуйста, как правильно построить запрос, чтобы получить правильный ответ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2013, 14:29 |
|
||
|
Paradox и сложный запрос таблицам.
|
|||
|---|---|---|---|
|
#18+
Смирнов ВладимирSELECT distinct company.Name, company.FIO, pozition.Name, company.Adres, company.Phone, company.Site, company.Mail FROM company, pozition WHERE company.Name like 'A%' ORDER by company.Name то результат не верен. Оговорюсь, что компаний, отвечающих данному условию (название начинается с буквы "А") в моей базе всего две - одна с указанным ФИО и должностью, вторая - без. При этом в таблице pozition имеются 24 разных должности. Запрос отрабатывает и возвращает 2 * 24 = 48 результатов, где сначала идет информация о первой компании (с меняющимися 24 разными должностями), а потом то же самое про вторую компанию. И не важно, заполненны ли поля FIO и Pozition_ID или нет. Вполне естественно: т.к. Вы не указываете условие соединения таблиц то кол-во строк в результирующей табл. равно произведению кол-ва строк в первой таблице (с учетом WHERE) на кол-во строк во второй табл. Правильный запрос будет такой (практически пример из LOCALSQL.HLP на OUTER join): Код: sql 1. 2. 3. 4. 5. (ключевое слово OUTER можно опустить...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2013, 10:06 |
|
||
|
|

start [/forum/topic.php?fid=56&msg=38209149&tid=2015262]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
163ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 497ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...