Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
12 / 0 / 0
Регистрация: 10.11.2017
Сообщений: 95
1

Объединение двух таблиц

03.12.2018, 22:15. Показов 2642. Ответов 5
Метки нет (Все метки)

Есть таблица авторов и таблица книг, у одного автора может быть много книг. Так вот, если просто "джойнить" таблицы, то получается примерно такое:
Пушкин Капитанская дочка
Пушкин Руслан и Людмила
Толстой Анна Каренина
Толстой Война и мир
Как мне сделать так, что бы автор выводился только один раз и в остальных случаях значение в строке было пустым? Т.е. так:
Пушкин Капитанская дочка
null Руслан и Людмила
Толстой Анна Каренина
null Война и мир
0

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

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2018, 22:15
Ответы с готовыми решениями:

Объединение двух таблиц
Select count(*) as amount,house from ua058 group by house order by house;и select distinct...

Объединение двух таблиц
Добрый день. Появился следующий вопрос - упрощаем процесс инвентаризации. Алгоритм таков -...

Объединение таблиц с подменой
Подскажите пожалуйста. У меня есть таблица1, запрос такой: select name_id, m_id from table1; И...

Объединение нескольких таблиц
Доброго всем дня! Есть несколько таблиц с разным набором данных, например: Лицо (фамилия,имя...

5
138 / 82 / 23
Регистрация: 21.10.2009
Сообщений: 428
04.12.2018, 07:17 2
вам поможет аналитическая фунция row_number в связке с case.
1
198 / 96 / 48
Регистрация: 21.02.2011
Сообщений: 3,918
04.12.2018, 13:37 3
Цитата Сообщение от mibin Посмотреть сообщение
вам поможет аналитическая фунция row_number в связке с case.
интересно посмотреть как с помощью этого вы решите данную задачу
0
138 / 82 / 23
Регистрация: 21.10.2009
Сообщений: 428
04.12.2018, 14:02 4
Лучший ответ Сообщение было отмечено Женя Брянцев как решение

Решение

Цитата Сообщение от andreyfreelans Посмотреть сообщение
интересно посмотреть как с помощью этого вы решите данную задачу
Вот так:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
WITH
  w_auth AS
  (
    SELECT 1 AS ck_id, 'Толстой' AS cv_name FROM dual UNION ALL
    SELECT 2 AS ck_id, 'Пушкин'  AS cv_name FROM dual
  ),
  w_book AS
  (
    SELECT 1 AS ck_id, 'Война и мир' AS cv_name, 1 AS ck_auth FROM dual UNION ALL
    SELECT 2 AS ck_id, 'Детство' AS cv_name, 1 AS ck_auth FROM dual UNION ALL
    SELECT 3 AS ck_id, 'Капитанская дочка' AS cv_name, 2 AS ck_auth FROM dual UNION ALL
    SELECT 4 AS ck_id, 'Руслан и Людмила' AS cv_name, 2 AS ck_auth FROM dual
  )
SELECT CASE WHEN ROW_NUMBER() OVER (partition BY a.ck_id ORDER BY b.ck_id) = 1 THEN a.cv_name END AS auth,
       b.cv_name AS book_name
  FROM w_book b
       INNER JOIN w_auth a
               ON b.ck_auth = a.ck_id
 ORDER BY b.ck_id
1
198 / 96 / 48
Регистрация: 21.02.2011
Сообщений: 3,918
04.12.2018, 16:23 5
mibin, не знал, что так можно,
я бы решил через LAG/LEAD, но там бы потребовалось два case'а
0
138 / 82 / 23
Регистрация: 21.10.2009
Сообщений: 428
04.12.2018, 18:14 6
Лучший ответ Сообщение было отмечено Женя Брянцев как решение

Решение

Цитата Сообщение от andreyfreelans Посмотреть сообщение
я бы решил через LAG/LEAD, но там бы потребовалось два case'а
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
WITH
  w_auth AS
  (
    SELECT 1 AS ck_id, 'Толстой' AS cv_name FROM dual UNION ALL
    SELECT 2 AS ck_id, 'Пушкин'  AS cv_name FROM dual
  ),
  w_book AS
  (
    SELECT 1 AS ck_id, 'Война и мир' AS cv_name, 1 AS ck_auth FROM dual UNION ALL
    SELECT 2 AS ck_id, 'Детство' AS cv_name, 1 AS ck_auth FROM dual UNION ALL
    SELECT 3 AS ck_id, 'Капитанская дочка' AS cv_name, 2 AS ck_auth FROM dual UNION ALL
    SELECT 4 AS ck_id, 'Руслан и Людмила' AS cv_name, 2 AS ck_auth FROM dual
  )
SELECT CASE WHEN lag(a.cv_name, 1, 'null') OVER (partition BY a.ck_id ORDER BY b.ck_id) != a.cv_name THEN a.cv_name END AS auth,
       b.cv_name AS book_name
  FROM w_book b
       INNER JOIN w_auth a
               ON b.ck_auth = a.ck_id
 ORDER BY b.ck_id
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2018, 18:14

Запрос на объединение данных из таблиц
Добрый день! Подскажите как написать, такой запрос: Исходные данные: Таблица 1. (test1) Поля...

Объединение 2 таблиц в базу данных
Доброго времени суток, мужики! Помогите разобраться с ораклом. Создал 2 таблицы, а как их...

Объединение таблиц или что то в этом роде
есть запрос SELECT * FROM TABLE(некая_процедура(некий_айди)) Данный вопрос работает, выдает на...

Объединение данных из таблиц в одно поле с выпадающим списком
Добрый вечер, Есть 5 таблиц. В каждой из них имеются поля- Название Как создать общий список...

Объединение двух таблиц
Добрый день, Подскажите с чего начать. Есть база данный MySQL, в ней например таблица B со...

Объединение двух таблиц
Здравствуйте! Прошу помочь разобраться в этой путанице. В mysql я разбираюсь не так хорошо, как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.