Запрос полиморфной ассоциации
Значение issue_id в таблице Comments может встречаться в столбце первичных ключей обеих родительских таблиц, Bugs и FeatureRequests. Значение может встретиться в одной родительской таблице, но отсутствовать в другой. Поэтому крайне важно правильно использовать issuetype при объединении дочерней таблицы с родительской. Не следует сопоставлять значение issue_id с таблицей FeatureRequests, если оно было предназначено для сопоставления с таблицей Bugs или http://www.exoforce.ru/serii-lego/duplo.
Например, с помощью следующего программного кода извлекают комментарии для какой-нибудь заданной ошибки по значению 1234 первичного ключа:
Файл npHMepa:_Polymorphic/anti/select.sql
SELECT *
FROM Bugs AS b JOIN Comments AS с
ON (b.issue_id = c.issue_id AND c.issue_type = 'Bugs')
WHERE b.issue_id = 1234;
Хотя такой запрос работает, если ошибки хранятся в одной таблице Bugs, проблема возникает, когда Comments связывается с обеими таблицами, Bugs и FeatureRequests. В SQL необходимо указать все таблицы в объединении. Невозможно объединить Comments с двумя отдельными таблицами, переключаясь между ними строка за строкой, в зависимости от значения в столбце Comments .issue_type.
Чтобы извлечь какой-то конкретный комментарий или по ошибке, или по функции, требуется выполнить запрос с помощью внешнего объединения с обеими родительскими таблицами. Только одна из родительских таблиц будет удовлетворять своему объединению, поскольку часть условия объединения основано на значении в столбце Comments. issuetype. Использование внешнего объединения означает, что поля из таблицы, у которых нет соответствия, содержат значение Null в наборе результатов.
Опубликовал vovan666
July 02 2013 05:56:12 ·
0 Комментариев ·
3688 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.