Форум программистов, компьютерный форум, киберфорум
Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 05.01.2010
Сообщений: 13

Связать в запросе 2 поля таблицы с одним справочником

14.01.2010, 12:59. Показов 2278. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Есть таблица (SAMPLES) в БД Firebird Embedded, 2 поля которой (например, в данном случае единицы измерения RESULT_MEASUREID и NORM_MEASUREID для двух разных показателей RESULT и NORM) связаны с одним и тем же общим для них справочником «Единицы измерения» - таблица MEASURERB.
Пишу следующий запрос к таблицам БД:

Вариант 1 - Ошибка
SQL
1
2
3
4
SELECT SAMPLES.RESULT, SAMPLES. RESULT_MEASUREID, MEASURERB.MEASURE AS RESULT_MEASURE, SAMPLES.NORM, SAMPLES. NORM_MEASUREID, MEASURERB.MEASURE AS NORM_MEASURE
FROM SAMPLES
INNER JOIN MEASURERB ON MEASURERB.RECID = SAMPLES.RESULT_MEASUREID
JOIN MEASURERB ON MEASURERB.RECID = SAMPLES.NORM_MEASUREID
Вариант 2 - Ошибка
SQL
1
2
3
4
5
SELECT 
SAMPLES.RESULT, SAMPLES. RESULT_MEASUREID, MEASURERB.MEASURE AS RESULT_MEASURE, SAMPLES.NORM, SAMPLES. NORM_MEASUREID, MEASURERB.MEASURE AS NORM_MEASURE
FROM SAMPLES
INNER JOIN MEASURERB ON MEASURERB.RECID = SAMPLES.RESULT_MEASUREID
AND MEASURERB.RECID = SAMPLES.NORM_MEASUREID
И тот, и другой вариант выдает ошибки. Если связать 2 поля с двумя разными справочниками (например, RESULTS и NORMS), то работает без проблем. Например, такой вариант будет работать:

Вариант 3 - Работает
SQL
1
2
3
4
SELECT SAMPLES. RESULT_MEASUREID, RESULTS.RESULT_MEASURE, SAMPLES.NORM_MEASUREID, NORMS.NORM_MEASURE 
FROM SAMPLES
INNER JOIN RESULTS ON RESULTS.RECID = SAMPLES.RESULT_MEASUREID
JOIN NORMS ON NORMS.RECID = SAMPLES.NORM_MEASUREID
Подскажите, пожалуйста, как корректно произвести вывод данных в случае 2 полей и одного справочника для них.
Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.01.2010, 12:59
Ответы с готовыми решениями:

В главной таблице два поля связаны с одним и тем же справочником, возможно такое?
Ситуация такая, есть главная таблица, по учету заправки лазерных картриджей, в ней есть поля: менеджер принявший картридж и менеджер...

Обмен одним справочником номенклатуры между двумя Бухгалтериями 8.2
Здравствуйте! Подскажите, пожалуйста, каким образом настроить синхронизацию одного справочника номенклатуры между двумя Бухами 8.2...

Связать 2 поля одной таблицы
Доброго вечера. Подскажите пожалуйста, как реализовать следующую идею: имеется таблица с 3-мя полями: id type price Надо,...

2
23 / 23 / 1
Регистрация: 20.12.2009
Сообщений: 74
15.01.2010, 10:28
Цитата Сообщение от atlant83 Посмотреть сообщение
...........
Спасибо.
Use alias, Luke! (C)

Кстати, ошибки принято описывать. Телепаты все в отпуске.
0
1 / 1 / 0
Регистрация: 05.01.2010
Сообщений: 13
26.01.2010, 09:56  [ТС]
Методом проб и ошибок удалось вывести корректно необходимую информацию. В данном случае все варианты с AND не заработали, просматривал книгу по Firebird, натолкнулся на понятие вложенного подзапроса.
Проверил, корректно работает в двух похожих вариантах:
Вариант 1 – Работает
SQL
1
2
3
SELECT SAMPLES.RESULT_MEASUREID, (SELECT  MEASURERB.MEASURE AS RESULT_MEASURE WHERE MEASURERB.RECID = SAMPLES.RESULT_MEASUREID), SAMPLES.NORM_MEASUREID, MEASURERB.MEASURE AS NORM_MEASURE
FROM SAMPLES
INNER JOIN MEASURERB ON MEASURERB.RECID = SAMPLES.NORM_MEASUREID
Т.е. одно поле связываем через вложенный подзапрос, а другое стандартно посредством конструкции INNER JOIN.
Вариант 2 – Работает
SQL
1
2
3
SELECT SAMPLES.RESULT_MEASUREID, (SELECT  MEASURERB.MEASURE AS RESULT_MEASURE WHERE MEASURERB.RECID = SAMPLES.RESULT_MEASUREID), SAMPLES.NORM_MEASUREID, (SELECT  MEASURERB.MEASURE AS NORM_MEASURE WHERE MEASURERB.RECID = SAMPLES.NORM_MEASUREID), SAMPLES.CLIENTID, SAMPLES.CLIENT_NAME
FROM SAMPLES
INNER JOIN CLIENTS ON CLIENTS.RECID = SAMPLES.CLIENTID
В данном варианте оба поля (для одного и того же справочника) связываем через вложенные подзапросы. Зато в конструкции INNER JOIN можно прописать связки для случаев <одно поле «SAMPLES.CLIENTID» = один справочник «CLIENTS» >. Второй вариант мне нравится больше.

Добавлено через 3 минуты
Цитата Сообщение от Senya_L Посмотреть сообщение
Use alias, Luke! (C)

Кстати, ошибки принято описывать. Телепаты все в отпуске.
Ничего конкретного. Была ошибка подготовки SQL запроса. Исправлено.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.01.2010, 09:56
Помогаю со студенческими работами здесь

Связать 2 поля одной таблицы
Доброго вечера. Подскажите пожалуйста, как реализовать следующую идею: имеется таблица с 3-мя полями: id type price Надо,...

Связать 2 поля одной таблицы
Доброго вечера. Подскажите пожалуйста, как реализовать следующую идею: имеется таблица с 3-мя полями: id type price Надо,...

Как связать таблицы (поля)?
Внешний ключ, ссылающийся на TchPK в TEACHER Правильно на г*мнокодил? CREATE TABLE FACULTY( FACPK INTEGER NOT NULL PRIMARY KEY, ...

Можно ли выучить С#, пользуясь одним только справочником msdn, достаточно ли этого?
Возник такой вопрос: а можно ли выучить С#,пользуясь одним только справочником mcdn, достаточно ли этого? Почему? Заранее спасибо...

Как связать поля таблицы БД и компоненты на форме
В общем, есть у меня БД на SQL Server 2012, есть форма на делфи на которой лежат компоненты DBEdit и DBNavigator, как мне связать все эти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru