join таблицы on несколько условий
От: ABK Украина  
Дата: 25.10.05 16:23
Оценка:
Как можно сделать join таблицы, наложив при этом несколько условий?, т.е: В одной таблице хранятся все отделы, в другой — все комнаты, а третья имеет вид: первый столбец — номер отдела, второй — относительный номер комнаты в отделе, третий — описание. При этом комната не обязательно будет иметь описание. Необходимо получить результирующую таблицу со всеми комнатами отдела, и показать описание для тех, для которых оно есть. Необходимо что-то типа
... join описания on (описания.комната = комнаты.комната and описания.отдел = отделы.отдел)
Re: join таблицы on несколько условий
От: wildwind Россия  
Дата: 25.10.05 17:57
Оценка:
Здравствуйте, ABK, Вы писали:

ABK>Как можно сделать join таблицы, наложив при этом несколько условий?, т.е: В одной таблице хранятся все отделы, в другой — все комнаты, а третья имеет вид: первый столбец — номер отдела, второй — относительный номер комнаты в отделе, третий — описание. При этом комната не обязательно будет иметь описание. Необходимо получить результирующую таблицу со всеми комнатами отдела, и показать описание для тех, для которых оно есть. Необходимо что-то типа

ABK>
ABK>... join описания on (описания.комната = комнаты.комната and описания.отдел = отделы.отдел)
ABK>


Вообще, несколько условий в on никто не запрещает. Но в твоем случае соединение надо записать так:
select ...
  from описания
  join отделы on описания.отдел = отделы.отдел
  join комнаты on описания.комната = комнаты.комната 
...
Re: join таблицы on несколько условий
От: _Senya  
Дата: 25.10.05 18:00
Оценка:
Здравствуйте, ABK, Вы писали:

ABK>Как можно сделать join таблицы, наложив при этом несколько условий?, т.е: В одной таблице хранятся все отделы, в другой — все комнаты, а третья имеет вид: первый столбец — номер отдела, второй — относительный номер комнаты в отделе, третий — описание. При этом комната не обязательно будет иметь описание. Необходимо получить результирующую таблицу со всеми комнатами отдела, и показать описание для тех, для которых оно есть. Необходимо что-то типа

ABK>
ABK>... join описания on (описания.комната = комнаты.комната and описания.отдел = отделы.отдел)
ABK>



[sql]
SELECT *
FROM Rooms R
LEFT JOIN Descriptions D ON R.RoomNo = D.RoomNo AND D.DepartmentID = @ID
WHERE R.DepartmentID = @ID
[sql]

Где не будет описаний, будет NULL
Дураки — не мамонты, они не вымрут...
Re[2]: join таблицы on несколько условий
От: _Senya  
Дата: 25.10.05 18:01
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, ABK, Вы писали:


ABK>>Необходимо получить результирующую таблицу со всеми комнатами отдела, и показать описание для тех, для которых оно есть.

ABK>>
ABK>>... join описания on (описания.комната = комнаты.комната and описания.отдел = отделы.отдел)
ABK>>


W>Вообще, несколько условий в on никто не запрещает. Но в твоем случае соединение надо записать так:

W>
W>select ...
W>  from описания
W>  join отделы on описания.отдел = отделы.отдел
W>  join комнаты on описания.комната = комнаты.комната 
W>...
W>


Не пойдет. Записи, для которых не будет описания, в выборку не попадут.
Дураки — не мамонты, они не вымрут...
Re: join таблицы on несколько условий
От: GlebZ Россия  
Дата: 25.10.05 18:01
Оценка: 2 (1)
Здравствуйте, ABK, Вы писали:

ABK>Как можно сделать join таблицы, наложив при этом несколько условий?, т.е: В одной таблице хранятся все отделы, в другой — все комнаты, а третья имеет вид: первый столбец — номер отдела, второй — относительный номер комнаты в отделе, третий — описание. При этом комната не обязательно будет иметь описание. Необходимо получить результирующую таблицу со всеми комнатами отдела, и показать описание для тех, для которых оно есть. Необходимо что-то типа

Наколько я понял твою структуру таблиц.
select * from mytable inner join комнаты (on комнаты.комната=mytable.комната
inner join отделы on отделы.отдел=mytable.отдел
left outer join описание on (mytable.описание = описание.текст)
where отделы.номер=@номер


С уважением, Gleb.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.