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

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
ekaterina_tw
Сообщения: 10
Зарегистрирован: 20 янв 2008, 18:42

Здравствуйте, ннужно написать запрос, чтоьбы получить следующее:

есть 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

Подскажите пожалуйста как это сделать.
ekaterina_tw
Сообщения: 10
Зарегистрирован: 20 янв 2008, 18:42

Может это средствами SQL невозможно сделать?
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

можно. через LEFT JOIN
ekaterina_tw
Сообщения: 10
Зарегистрирован: 20 янв 2008, 18:42

Спасибо, пойду изучать.
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

может и не зря Вы отправились изучать 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)
Кстати, было бы неплохо Вам указывать какую СУБД используете...
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

не проверял, но по-моему, достаточно первой части, т.е. просто выполнить inner join двух таблиц по ID
Изображение
ekaterina_tw
Сообщения: 10
Зарегистрирован: 20 янв 2008, 18:42

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

Ваше мнение?
ekaterina_tw
Сообщения: 10
Зарегистрирован: 20 янв 2008, 18:42

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

СУБД: MS SQL Server 2000
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

вот, почитайте здесь:
http://www.sql.ru/faq/faq_topic.aspx?fid=126

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

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