LINUX.ORG.RU

Помогите с запросом на PostgreSQL

 ,


0

1

База данных

create table books(
id integer GENERATED BY DEFAULT AS IDENTITY PRIMARY key,
title text
);

create table authors(
id integer GENERATED BY DEFAULT AS IDENTITY PRIMARY key,
last_name text,
first_name text,
second_name text
);

create table authorship(
book_id integer references books(id),
author_id integer references authors(id),
seq_num integer
);

insert into books
values
(1, 'Сказка о царе Салтане'),
(2, 'Муму'),
(3, 'Трудно быть богом'),
(4, 'Война и мир'),
(5, 'Путешествие в некоторые удаленные страны мира в четырех частях: сочинение Лемуэля Гулливера, сначала хирурга, а затем капитана нескольких кораблей'),
(6, 'Хрестоматия');

insert into authors
values
(1, 'Пушкин', 'Александр', 'Сергеевич'),
(2, 'Тургенев', 'Иван', 'Сергеевич'),
(3, 'Стругацкий', 'Борис', 'Натанович'),
(4, 'Стругацкий', 'Аркадий', 'Натанович'),
(5, 'Толстой', 'Лев', 'Николаевич'),
(6, 'Свифт', 'Джонатан', '');

insert into authorship
values
(1,1,1),
(2,2,1),
(3,3,2),
(3,4,1),
(4,5,1),
(5,6,1),
(6,1,1),
(6,5,2),
(6,2,3);

Задание

Выполнить следующие задания, скрипт запросов и результаты выполнения занесите в отчет:

·   Реализуйте скрипт, позволяющий удалить все пользовательские объекты с базы данных. Код запроса, результат (до и после) отобразить в отчете

 · Создайте функцию имя книги(book_name) для формирования названия книги. Функция принимает два параметра (идентификатор    книги(id) и заголовок(tittle)) и возвращает строку, составленную из заголовка и списка авторов в порядке seq_num. Имя каждого

автора формируется функций author_name. Создайте представление, в котором указывается идентификатор книги, вызов созданной функции (Исходные данные находятся в файле: «book_shop.txt» и «log_schema_book_shop.png»).

 · Измените созданную функцию: если у книги больше двух авторов, то в названии указываются только первые два и в конце добавляется "и д.р.". Пример:

           Выводится: "Хрестоматия. Пушкин А. С., Толстой Л. Н., Тургенев И. С."
           Ожидается: Хрестоматия. Пушкин А. С., Толстой Л. Н. и др.


Последнее исправление: hobbit (всего исправлений: 4)

Привет, поняш! Пожалуйста, не отправляй сообщения другим поняшам в виде графических материалов. Поняши не телепаты, а форум создан для общения текстовыми сообщениями.

anon1984
()
Ответ на: комментарий от Dm1Tr0N

1.Картинки не нужны, нужен текст.
2.Лаба стоит две тысячи российских рублей.
/thread

crutch_master ★★★★★
()
Ответ на: комментарий от theNamelessOne

Мох знаний не хватает что бы сделать то что от меня просят(( Я не знаю как Вывести авторов в одну строчку рядом с книгой

Dm1Tr0N
() автор топика
Ответ на: комментарий от Dm1Tr0N

Подсказка 1. В SQL есть строковые операции и функции, с их помощью вполне можно, скажем, объединить несколько полей одного запроса с необходимым форматированием.

Подсказка 2. Один запрос может быть по нескольким таблицам.

Другое дело, что у тебя там ещё и условия, на чистом SQL это реализуемо, но выглядеть будет довольно страшненько.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от Dm1Tr0N

Поняш, пожалуйста, отправляй картинки легитимным способом - используй новогодние открытки))

anon1984
()

Создать имя книги примерно так:

select b.title||' '||string_agg(a.last_name||' '||a.first_name||' '||a.second_name, ' ' order by s.seq_num) book_name
from books b
  join authorship s on s.book_id=b.id
  join authors a on a.id=s.author_id
where b.id=:BOOK_ID
Psilocybe ★★★★★
()
Ответ на: комментарий от Psilocybe

Что за b,a,s перед атрибутами? название таблиц?

Dm1Tr0N
() автор топика
Ответ на: комментарий от Psilocybe

Спасибо большое что помог!! От души прямо.

Dm1Tr0N
() автор топика
Ответ на: комментарий от Psilocybe

Можешь подсказать ка сделать так, что бы если было больше 2х авторов показывалось так

Хрестоматия. Пушкин А. С., Толстой Л. Н. и др.

Dm1Tr0N
() автор топика
Ответ на: комментарий от Dm1Tr0N

Дяденька, дайте попить. А то так есть хочется, что переночевать негде.

знаний не хватает что бы сделать то что от меня просят

Ну так и объясни тем кто просит, что они ошиблись и не за того тебя принимают.

no-such-file ★★★★★
()

ты забыл добавить цену сколько готов заплатить и ошибся разделом - надо было постить сообщение в раздел Job.

no-dashi-v2 ★★★
()
Ответ на: комментарий от Dm1Tr0N
SELECT
	x.a[1]
	||
	CASE WHEN x.a[2] IS NOT NULL THEN ', ' || x.a[2] ELSE '' END
	||
	CASE WHEN x.a[3] IS NOT NULL THEN ' и др.' ELSE '' END 
FROM (
	SELECT
		array_agg(a.title) AS a
	FROM
		(VALUES(1,'Пушкин'),(2,'Толстой'),(3,'Фонвизин')) AS a(id,title)
) x
Toxo2 ★★★★
()
Ответ на: комментарий от cocucka

Тут тебе помогут: https://chat.openai.com/chat

А для РФ закрыто, и VPN не помогает, требуют номер телефона. Так что пока массового выполнения работ, написания сочинений и дипломов от GPT тут можно не опасаться.

soomrack ★★★★★
()

скуль, на базовом уровне (селекты, простые джоины, удалить-добавить), прост как валенок. для чего он и создавался собсно… и лучше бы в этом и оставался.

mrjaggers
()

удалить все пользовательские объекты с базы данных

с базы данных

с

посанчик, ты с какого раёна?

что это вообще за набор слов? реализуйте скрипт, позволяющий бла-бла..

man DROP ?

mrjaggers
()
Ответ на: комментарий от mrjaggers

Вот ты. SQL - идеальный пример годного DSL в любых смыслах. Ну а man DROP попробуй поизучать сам, прежде, чем на всеобщее обозрение идиотизм выставлять.

Anoxemian ★★★★★
()
Ответ на: комментарий от Anoxemian

я этим 8 лет занимаюсь. только вот ах и ох красивые слова типа CRUD не люблю.

man DROP это была фигура речи.

если ты это не вкурил, ну так.. твои проблемы.

mrjaggers
()
Ответ на: комментарий от mrjaggers

Шизофазник, чем тебе

только вот ах и ох красивые слова типа CRUD не люблю.

Тем более, за 8 лет.

Anoxemian ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.