как сделать два в одном

albert
Дата: 02.10.2000 13:38:18
Люди! У меня вопрос тут нарисовался.
Имеются: таб 1 (содержит id и name) - типа справочник для таб 2
таб 2 (содержит id сом1 и сом2)
сом1 и сом2 - поля, содержащие значения индекса таб1
Внимание, вопрос:
какой запрос сможет вывести текстовые значения сом1 и сом2?
aaf@mailru.com
AnatolyS
Дата: 02.10.2000 15:04:09
если я правильно понял, то так

select t1.id, t21.name, t22.name
from tab1 t1 left join tab2 t21 on ( t1.com1 = t21.id )
left join tab2 t22 on ( t1.com2 = t22.id )
albert
Дата: 03.10.2000 02:57:36
А откуда t21.name и t22.name?
Я то по любому этот вариант по-пробую, но как это?
SergSuper
Дата: 03.10.2000 05:29:07
А может проще?
select сом1, сом2 from таб2

Я конечно понимаю что не так, но попробуйте сформулировать, чем это решение не подходит. Уж больно вопрос трудно понять. Может приведёте таблички с данными и тем что должно получиться?

С приветом Сергей
AnatolyS
Дата: 03.10.2000 10:08:19
текстовые значения сом1 и сом2 - это и есть t21.name и t22.name
а откуда они - так ведь SQL как бы это сказать - несмотря на всю
простоту - тоже язык - учить его надо.
А вот по поводу сложности понимания вопроса - это точно.
SergSuper
Дата: 03.10.2000 10:52:12
Уже лучше. Осталось только выяснить как же связано сом1 с t21.name, а сом2 с t22.name.

Чем такой пример не понравиться?

create table #t1(id int, name varchar(5))
create table #t2(com1 int, com2 int)

insert #t1 select 1,'One' union select 2, 'Two'
insert #t2 select 1,2

select t21.name, t22.name
from #t1 t21, #t1 t22, #t2 t2
where t21.id=t2.com1 and t22.id=t2.com2
AnatolyS
Дата: 04.10.2000 07:45:15
1.t21 и t22 - алиасы для таблицы с com1 и com2
2.по поводу последнего примера - у тебя таблица #t2 допускает NULL значения для
атрибутов
ну и и если какой - нибудь из com будет иметь значение NULL, то
запрос ничего не возвратит.
Надо так - или нет - всё зависит от семантики БД.
SergSuper
Дата: 04.10.2000 12:34:54
А так?

create table #t1(id int, name varchar(5))
create table #t2(com1 int null, com2 int null)


insert #t1 select 1,'One' union select 2, 'Two'
insert #t2 select 1,2
insert #t2 select 1,null
insert #t2 select null,2

select t21.name, t22.name
from #t1 t21, #t1 t22, #t2 t2
where t21.id=*t2.com1 and t22.id=*t2.com2
AnatolyS
Дата: 04.10.2000 14:08:51
собственно оператор *= есть эквивалент используемого мной left join а
но join - понятнее. И стандартнее. SQL 92 поддерживает

FROM first_table join_type second_table [ON (join_condition)]