Как составить запрос
-
- Сообщения: 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
Подскажите пожалуйста как это сделать.
есть 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
Подскажите пожалуйста как это сделать.
-
- Сообщения: 10
- Зарегистрирован: 20 янв 2008, 18:42
Может это средствами SQL невозможно сделать?
-
- Сообщения: 375
- Зарегистрирован: 31 авг 2007, 03:06
можно. через LEFT JOIN
-
- Сообщения: 10
- Зарегистрирован: 20 янв 2008, 18:42
Спасибо, пойду изучать.
-
- Сообщения: 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)
Кстати, было бы неплохо Вам указывать какую СУБД используете...
а я вот вынужден извиниться! Недоглядел сразу, что в 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

-
- Сообщения: 10
- Зарегистрирован: 20 янв 2008, 18:42
Нет, кто-то из нас запутался.
LEFT JOIN выдает как раз тот результат, что мне нужен.
каждый alias добавляется в результирующую таблицу столько раз, сколько он встречается в T2.
А вот INNER JOIN выдает только те строки, для которых alias не NULL,
в то врема как мне нужно, чтобы строки с нулевым алиасом тоже были включены в результат.
Ваше мнение?
LEFT JOIN выдает как раз тот результат, что мне нужен.
каждый alias добавляется в результирующую таблицу столько раз, сколько он встречается в T2.
А вот INNER JOIN выдает только те строки, для которых alias не NULL,
в то врема как мне нужно, чтобы строки с нулевым алиасом тоже были включены в результат.
Ваше мнение?
-
- Сообщения: 10
- Зарегистрирован: 20 янв 2008, 18:42
И еще не подскажете как вставить в результат столбец содержащий порядковые номера строк?
Я нашла много способов, опирающихся на уникальный ID, но у меня ID не уникальный.
Я нашла много способов, опирающихся на уникальный ID, но у меня ID не уникальный.
-
- Сообщения: 10
- Зарегистрирован: 20 янв 2008, 18:42
СУБД: MS SQL Server 2000
-
- Сообщения: 375
- Зарегистрирован: 31 авг 2007, 03:06
вот, почитайте здесь:
http://www.sql.ru/faq/faq_topic.aspx?fid=126
и не забудьте про комменты, там тоже есть интересные мысли.
К слову, а в таблицы добавить уникальный ключ религия не позволяет? ;-))
http://www.sql.ru/faq/faq_topic.aspx?fid=126
и не забудьте про комменты, там тоже есть интересные мысли.
К слову, а в таблицы добавить уникальный ключ религия не позволяет? ;-))