Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 INNER JOIN для разных таблиц  [new]
Elena_Kr
Member

Откуда:
Сообщений: 2
Есть необходимость создать представление с несколькими объединениями, подскажите, пожалуйста, как правильно это сделать. Ниже представлено мое понимание, но оно ошибочное, исправить не получается
CREATE VIEW [dbo].[вирт_Отчет] AS 
	SELECT 	[Отчет].[Дата сдачи отчета],[Отчет].[Заключение руководителя],[Отчет].[Рекомендации руководителя], [Персона].[Код],[Персона].[ФИО],
		[Должность_руководителя].[Код должности руководителя],[Должность_руководителя].[Название должности руководителя],
		[Кафедра].[Код кафедры],[Кафедра].[Название кафедры],
		[Факультет].[Код факультета],[Факультет].[Название факультета],
		[Отчетный_период].[Код отчетного периода],[Отчетный_период].[Название отчетного периода]		
	FROM [Отчет], [Персона], [Должность_руководителя], [Кафедра], [Факультет], [Отчетный_период]  
	INNER JOIN [Персона] ON [Отчет].[Код аспиранта] = [Персона].[Код] 
	AND [Отчет].[Код руководителя] = [Персона].[Код]
	INNER JOIN [Кафедра] ON [Отчет].[Код кафедры] = [Кафедра].[Код кафедры]
	INNER JOIN [Отчетный_период] ON [Отчет].[Код отчетного периода] = [Отчетный_период].[Код отчетного периода]
    INNER JOIN [Факультет] ON [Кафедра].[Код факультета] = [Факультет].[Код факультета]


Модератор: Тема перенесена из форума "MySQL".


Сообщение было отредактировано: 21 ноя 16, 23:13
21 ноя 16, 22:17    [19918416]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN для разных таблиц  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Elena_Kr,

...
FROM [Отчет]
	INNER JOIN [Персона] ON [Отчет].[Код аспиранта] = [Персона].[Код] AND [Отчет].[Код руководителя] = [Персона].[Код]
	INNER JOIN [Кафедра] ON [Отчет].[Код кафедры] = [Кафедра].[Код кафедры]
	INNER JOIN ...
21 ноя 16, 23:19    [19918557]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN для разных таблиц  [new]
кролик-зануда
Guest
Mind,

полагаю, вместо
INNER JOIN [Персона] ON [Отчет].[Код аспиранта] = [Персона].[Код] AND [Отчет].[Код руководителя] = [Персона].[Код]

все-таки нужно
INNER JOIN [Персона] [Аспирант] ON [Отчет].[Код аспиранта] = [Аспирант].[Код] 
INNER JOIN [Персона] [Руководитель] ON [Отчет].[Код руководителя] = [Персона] .[Код]
21 ноя 16, 23:22    [19918566]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN для разных таблиц  [new]
кролик-зануда
Guest
кролик-зануда,
конечно же, во втором случае [Персона] .[Код] следует читать как [Руководитель].[Код]
21 ноя 16, 23:24    [19918570]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN для разных таблиц  [new]
Elena_Kr
Member

Откуда:
Сообщений: 2
Mind, спасибо за помощь, но если убрать остальные таблицы из FROM, то появляются ошибки "неразрешенная или неоднозначная ссылка на объект" в SELECT
22 ноя 16, 19:50    [19922469]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN для разных таблиц  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37228
Elena_Kr,

А расскажите, пожалуйста, как называется ваша СУБД, для которой вы пишите запрос?
22 ноя 16, 19:52    [19922476]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN для разных таблиц  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Elena_Kr
Mind, спасибо за помощь, но если убрать остальные таблицы из FROM, то появляются ошибки "неразрешенная или неоднозначная ссылка на объект" в SELECT

запрос покажите, 2 таблицы с одинаковым названием/алиасом
22 ноя 16, 19:52    [19922477]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN для разных таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47084
TaPaK
Elena_Kr
Mind, спасибо за помощь, но если убрать остальные таблицы из FROM, то появляются ошибки "неразрешенная или неоднозначная ссылка на объект" в SELECT

запрос покажите, 2 таблицы с одинаковым названием/алиасом
Она, видимо, полагает, что все таблицы во FROMе сначала надо перечислить через запятую,
а уж потом писать для них JOINы
23 ноя 16, 10:34    [19923827]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN для разных таблиц  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 942
Можно я тоже применю бытовую телепатию?
CREATE 
VIEW [dbo].[вирт_Отчет] 
AS 
SELECT
  [Отчет].[Дата сдачи отчета],
  [Отчет].[Заключение руководителя],
  [Отчет].[Рекомендации руководителя],
  [Персона].[Код],
  [Персона].[ФИО],
	[Должность_руководителя].[Код должности руководителя],
  [Должность_руководителя].[Название должности руководителя],
	[Кафедра].[Код кафедры],
  [Кафедра].[Название кафедры],
	[Факультет].[Код факультета],
  [Факультет].[Название факультета],
	[Отчетный_период].[Код отчетного периода],
  [Отчетный_период].[Название отчетного периода]		
FROM 
  [Отчет]
	INNER JOIN [Персона] ON (
        [Персона].[Код]  = [Отчет].[Код аспиранта] )
	INNER JOIN [Должность_руководителя] ON (
        [Должность_руководителя].[Код] = [Отчет].[Код руководителя] )
	INNER JOIN [Отчетный_период] ON (
        [Отчетный_период].[Код отчетного периода] = [Отчет].[Код отчетного периода] )
	INNER JOIN [Кафедра] ON (
        [Кафедра].[Код кафедры] = [Отчет].[Код кафедры] )
  INNER JOIN [Факультет] ON (
        [Факультет].[Код факультета] = [Кафедра].[Код факультета] )
23 ноя 16, 17:11    [19926346]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN для разных таблиц  [new]
FreeBard
Member

Откуда:
Сообщений: 223
а можно оставить кросс джоин как в первоначальном запросе, а все условия соединений вынести в where
плохо читаемо, но тоже вариант
24 ноя 16, 13:24    [19929604]     Ответить | Цитировать Сообщить модератору
 Re: INNER JOIN для разных таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47084
FreeBard
а можно оставить кросс джоин как в первоначальном запросе, а все условия соединений вынести в where
плохо читаемо, но тоже вариант
Не рекомендуется смешивать старый синтаксис - запятую - и новый - JOIN - в одном FROMе.
24 ноя 16, 13:44    [19929709]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить