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

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

14.01.2010, 12:59. Показов 2246. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru