Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Как написать SQL-запрос для получения результирующего списка  [new]
Hito
Member

Откуда:
Сообщений: 8
Здравствуйте. Помогите пожалуйста с решением задачи, уже почти сутки бьюсь, я с SQL почти не работал, но очень нужно решение.

Задание:
Имеется список авторов (таблица A) и список книг (таблица B).

Таблица A:
Author Birthday
Иванов 01.01.1950
Петров 31.12.1960
Сидоров 05.05.1965
Синицын 01.01.1970

Таблица B:
Author Book
Воробьев Книга 4
Воробьев Книга 5
Воробьев Книга 6
Иванов Книга 1
Сидоров Книга 2
Сидоров Книга 3

Необходимо написать SQL-запрос для получения результирующего списка с полями Author, Birthday, Book. В списке должны присутствовать все авторы, которые встречаются и в таблице A и в таблице B, а также все имеющиеся сведения о них из таблиц A и B.

Результат запроса:
Author Birthday Book
Воробьев Книга 4
Воробьев Книга 5
Воробьев Книга 6
Иванов 01.01.1950 Книга 1
Петров 31.12.1960
Сидоров 05.05.1965 Книга 2
Сидоров 05.05.1965 Книга 3
Синицын 01.01.1970


Буду очень благодарен за помощь
11 фев 21, 03:40    [22279248]     Ответить | Цитировать Сообщить модератору
 Re: Как написать SQL-запрос для получения результирующего списка  [new]
_avz
Member

Откуда: Пермь
Сообщений: 2816
тривиальный join

select * from A join B on A.Author = B.Author
11 фев 21, 16:03    [22279572]     Ответить | Цитировать Сообщить модератору
 Re: Как написать SQL-запрос для получения результирующего списка  [new]
Hito
Member

Откуда:
Сообщений: 8
Результат получается не такой как в задании

К сообщению приложен файл. Размер - 8Kb
11 фев 21, 17:56    [22279641]     Ответить | Цитировать Сообщить модератору
 Re: Как написать SQL-запрос для получения результирующего списка  [new]
Hito
Member

Откуда:
Сообщений: 8
Я пробовал сделать вот так:

SELECT
table_b.author,
birthday,
book
FROM table_b
full JOIN table_a ON table_b.author=table_a.author


получилось что то близкое но не то
11 фев 21, 17:58    [22279642]     Ответить | Цитировать Сообщить модератору
 Re: Как написать SQL-запрос для получения результирующего списка  [new]
Hito
Member

Откуда:
Сообщений: 8
Такой результат должен быть

К сообщению приложен файл. Размер - 7Kb
11 фев 21, 18:03    [22279648]     Ответить | Цитировать Сообщить модератору
 Re: Как написать SQL-запрос для получения результирующего списка  [new]
Hito
Member

Откуда:
Сообщений: 8
Выше я не чётко описал исходные данные
дублирую в более надлежащем виде

Таблица A:

Author Birthday
Иванов 01.01.1950
Петров 31.12.1960
Сидоров 05.05.1965
Синицын 01.01.1970

Таблица B:

Author Book
Воробьев Книга 4
Воробьев Книга 5
Воробьев Книга 6
Иванов Книга 1
Сидоров Книга 2
Сидоров Книга 3
11 фев 21, 18:07    [22279650]     Ответить | Цитировать Сообщить модератору
 Re: Как написать SQL-запрос для получения результирующего списка  [new]
Hito
Member

Откуда:
Сообщений: 8
блин всё равно всё съехало))
11 фев 21, 18:08    [22279654]     Ответить | Цитировать Сообщить модератору
 Re: Как написать SQL-запрос для получения результирующего списка  [new]
Hito
Member

Откуда:
Сообщений: 8
ещё раз

К сообщению приложен файл. Размер - 8Kb
11 фев 21, 18:10    [22279655]     Ответить | Цитировать Сообщить модератору
 Re: Как написать SQL-запрос для получения результирующего списка  [new]
londinium
Member

Откуда: Киев
Сообщений: 1193
А так:

WITH AUTHORS (NAME,BIRTHDAY)AS
  (
    SELECT 'Иванов', '01.01.1950'
        UNION ALL 
SELECT'Петров' ,'31.12.1960'
       UNION ALL 
SELECT'Сидоров' ,'05.05.1965'
      UNION ALL 
SELECT'Синицын' ,'01.01.1970' 
  ),
  BOOKS(Author, Book) AS 
(
  SELECT 'Воробьев',' Книга 4'
     UNION ALL 
SELECT 'Воробьев', 'Книга 5'
     UNION ALL 
SELECT 'Воробьев', 'Книга 6'
    UNION ALL 
SELECT 'Иванов' ,'Книга 1'
   UNION ALL 
SELECT 'Сидоров' ,'Книга 2'
   UNION ALL 
SELECT 'Сидоров' ,'Книга 3' 
)
SELECT COALESCE(A.NAME,B.AUTHOR)AS AUTHOR ,COALESCE(CAST(A.BIRTHDAY AS VARCHAR(10)),'')AS BIRTHDAY,
  COALESCE(B.BOOK,'')AS BOOK 
  FROM AUTHORS A 
  FULL JOIN BOOKS B ON A.NAME=B.Author
11 фев 21, 18:54    [22279690]     Ответить | Цитировать Сообщить модератору
 Re: Как написать SQL-запрос для получения результирующего списка  [new]
Hito
Member

Откуда:
Сообщений: 8
Спасибо огромное, это не совсем правильно, но на основе этого я доделал как положено!))
11 фев 21, 19:11    [22279694]     Ответить | Цитировать Сообщить модератору
 Re: Как написать SQL-запрос для получения результирующего списка  [new]
VaRas
Member

Откуда:
Сообщений: 203
не актуально, но как вариант

SELECT *
From 
(
select distinct author
FROM
(
select Author 
from A 
union
select Author 
from B 
) as t) as authors
left join a
on authors.author = a.Author 
left join B 
on authors.author = b.Author 
order by authors.author;
вчера, 01:03    [22286092]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить