Страница 1 из 1

Как составить запрос

Добавлено: 05 мар 2008, 21:20
ekaterina_tw
Здравствуйте, ннужно написать запрос, чтоьбы получить следующее:

есть 2 таблицы
T1:
ID Name Code
1 n1 001
2 n2 002
3 n3 003

В первой таблице значение ID уникально.

вторая таблица содержит alias, для имен в первой. Одному имени из первой таблицы может сооьветствовать нескольно aлиасов из второй.
T2:
ID Alias
1 a1
1 a2
2 a3
4 а4

Нужно получить таблицу, в которую для каждого имени будут включены все алиасы.
вот так:
ID Name Code Alias
1 n1 001 a1
1 n1 001 a2
2 n2 002 a3
3 n3 003

Подскажите пожалуйста как это сделать.

Re: Как составить запрос

Добавлено: 05 мар 2008, 23:33
ekaterina_tw
Может это средствами SQL невозможно сделать?

Re: Как составить запрос

Добавлено: 06 мар 2008, 07:20
Serge_Bliznykov
можно. через LEFT JOIN

Re: Как составить запрос

Добавлено: 06 мар 2008, 07:47
ekaterina_tw
Спасибо, пойду изучать.

Re: Как составить запрос

Добавлено: 06 мар 2008, 16:19
Serge_Bliznykov
может и не зря Вы отправились изучать SQL
а я вот вынужден извиниться! Недоглядел сразу, что в T2 идёт повтор ID и при этом значения ALIAS разные...

вот, попробуйте такой запрос:
SELECT T1.*, T2.Alias
FROM T1 INNER JOIN T2 ON T1.ID = T2.ID
UNION
SELECT T1.*, ' ' as Alias FROM T1 WHERE T1.ID NOT IN (select T2.ID from T2);

(это я проверил в MS Access)
Кстати, было бы неплохо Вам указывать какую СУБД используете...

Re: Как составить запрос

Добавлено: 07 мар 2008, 14:55
Игорь Акопян
не проверял, но по-моему, достаточно первой части, т.е. просто выполнить inner join двух таблиц по ID

Re: Как составить запрос

Добавлено: 07 мар 2008, 22:08
ekaterina_tw
Нет, кто-то из нас запутался.
LEFT JOIN выдает как раз тот результат, что мне нужен.
каждый alias добавляется в результирующую таблицу столько раз, сколько он встречается в T2.
А вот INNER JOIN выдает только те строки, для которых alias не NULL,
в то врема как мне нужно, чтобы строки с нулевым алиасом тоже были включены в результат.

Ваше мнение?

Re: Как составить запрос

Добавлено: 07 мар 2008, 22:10
ekaterina_tw
И еще не подскажете как вставить в результат столбец содержащий порядковые номера строк?
Я нашла много способов, опирающихся на уникальный ID, но у меня ID не уникальный.

Re: Как составить запрос

Добавлено: 07 мар 2008, 22:13
ekaterina_tw
СУБД: MS SQL Server 2000

Re: Как составить запрос

Добавлено: 09 мар 2008, 09:43
Serge_Bliznykov
вот, почитайте здесь:
http://www.sql.ru/faq/faq_topic.aspx?fid=126

и не забудьте про комменты, там тоже есть интересные мысли.

К слову, а в таблицы добавить уникальный ключ религия не позволяет? ;-))