С Новым годом! Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 31.05.2018
Сообщений: 2

Запросы PL/SQL

10.11.2018, 05:44. Показов 1228. Ответов 6

Студворк — интернет-сервис помощи студентам
Здравствуйте,
Не могу понять, как правильно вывести название вида спорта (пробовал через подзапросы).
Помогите плиз
Вложенный select не работает, тк возвращает более одной строки
Получить список спортсменов, занимающихся более чем одним видом спорта с указанием этих видов спорта.


SQL
1
2
3
4
5
6
7
8
SELECT С.*, (SELECT ВС.название FROM Вид_спорта ВС, Спортсмен С, Разряд_спортсм РС WHERE РС.id_спортсмена = С.id_спортсмена AND ВС.id_вида_спорта = РС.id_вида_спорта)
FROM Спортсмен С
WHERE 
(
SELECT COUNT(РС.id_спортсмена)
FROM Разряд_спортсм РС
WHERE РС.id_спортсмена = С.id_спортсмена
) > 1
Миниатюры
Запросы PL/SQL  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.11.2018, 05:44
Ответы с готовыми решениями:

SQL запросы
Нужна помощь по SQL запросам. В Oracle SQL Developer Data Modeler нужно создать 7 запросов по базе данных.

Sql запросы
Добрый день! помогите пожалуйста очень нужно 1. Вывести производителя и список товаров, которые они производят 2. Вывести список...

Запросы на SQL
Есть задания, не могу выполнить... уже неделю делаю, ничего не получается.. помогите плиз... Таблица в приложении. --4(!)....

6
476 / 239 / 114
Регистрация: 12.05.2016
Сообщений: 647
10.11.2018, 11:53
SQL
1
2
3
4
5
6
7
8
WITH t (
  SELECT с.*, вс.название  название_вида , COUNT(1) OVER(PARTITION BY с.id_спортсмена) cnt
  FROM  спортсмен с
  JOIN  разряд_спортсм рс ON (рс.id_спортсмена = с.id_спортсмена)
  JOIN  вид_спорта  вс ON(вс.id_вида_спорта = рс.id_вида_спорта)
)  
SELECT t.Имя, t.Фамилия, t.Отчество,  t.название_вида
FROM t WHERE cnt > 1
Ну если виды спорта надо через запятую вывести в одной строке - можно сложить в кучу:

SQL
1
2
3
4
5
6
7
8
9
10
WITH t (
  SELECT с.*, вс.название , COUNT(1) OVER(PARTITION BY с.id_спортсмена) cnt
  FROM  спортсмен с
  JOIN  разряд_спортсм рс ON (рс.id_спортсмена = с.id_спортсмена)
  JOIN  вид_спорта  вс ON(вс.id_вида_спорта = рс.id_вида_спорта)
)  
SELECT t.Имя, t.Фамилия, t.Отчество 
, LISTAGG(t.название_вида,',') WITHIN GROUP(ORDER BY 1) виды_спорта 
FROM t WHERE cnt > 1
GROUP BY t.Имя, t.Фамилия, t.Отчество
0
0 / 0 / 0
Регистрация: 10.11.2018
Сообщений: 3
10.11.2018, 13:33
Подскажите пж как можно работать с определенной строкой в бд?
Что-то по типу
SQL
1
2
UPDATE nametable SET someparam='100'
     WHERE ROW_NUMBER() = 3;
Конкретно на этом примере хочу обновить значение someparam на 3 строке
Подскажите пожалуйста как такое можно сделать. Сёрфил очень много инфы, многое перепробовал, но только запутался
0
476 / 239 / 114
Регистрация: 12.05.2016
Сообщений: 647
10.11.2018, 19:31
В базе данных нет понятия "3 строка". Вообще. Как явления.

Можно обновить строку, у которой id = 3
Можно обновить строку, у которой name = 'Иван'

Но нельзя обновить строку 3 по-порядку, потому, что порядок у строк может быть абсолютно любой и определяется выражением ORDER BY
Внутри самой базы строки валяются в совершенном беспорядке и база не гарантирует, что при каждом запросе порядок будет один и тот же, если вы явно не укажете ORDER BY

Если вы напишете SELECT * FROM спортсмен с ORDER BY id_спортсмена ASC
то на третьем месте будет одна строка

Если вы напишете SELECT * FROM спортсмен с ORDER BY id_спортсмена DESC
то на третьем месте будет другая строка

Если вы напишете SELECT * FROM спортсмен с ORDER BY Фамилия ASC
то на третьем месте будет третья строка

Если вы напишете SELECT * FROM спортсмен с ORDER BY Фамилия DESC
то на третьем месте будет четвертая строка строка

И как по-вашему база должна понять, какую из этих четырех строк ей надо на самом деле обновлять, если вы говорите ей "обнови-ка мне третью строку" ?

Поэтому и нет нигде в интернете (и никогда не будет) таких примеров.

Чтобы однозначно обновить одну строку - нужно её как-то идентифицировать, выделить среди всех других. Идентифицируется строка обычно (как ни странно) по какому-то уникальному идентификатору. Чаще всего это какое-то поле типа ID.

Чтобы обновить запись, зная её ID пишут так:

SQL
1
UPDATE nametable SET someparam='100'   WHERE ID = 3;
0
0 / 0 / 0
Регистрация: 10.11.2018
Сообщений: 3
10.11.2018, 21:22
Ну а если к примеру у меня первая строка с id 1, а у второй id 10(2,3-9 не существует уже) и строка с id 10 идет вторая по порядку. И мне нужна исходя из сортировки по id выбрать вторую строку, при этом не важно какое значение у самого id(к примеру 10 как и писал ранее)
0
476 / 239 / 114
Регистрация: 12.05.2016
Сообщений: 647
10.11.2018, 22:04
Значит сначала надо выбрать вторую строку исходя из сортировки, найти какой у неё ID и после этого апдейтить её по этому ID. Вообще бизнес-кейс ваш не ясен.

Обычно если в интерфейсе каком-то вы отображаете строки, то вы прекрасно знаете ID этих строк, вы же из базы их уже получили как-то. И при необходимости отредактировать строку - вы редактируете сразу заранее известный ID, а не абстрактную "вторую строку".
0
0 / 0 / 0
Регистрация: 10.11.2018
Сообщений: 3
11.11.2018, 00:35
Добавлено через 1 минуту
Можете написать пример рабочего кода того что вы описали выше?
(Значит сначала надо выбрать вторую строку исходя из сортировки, найти какой у неё ID и после этого апдейтить её по этому ID)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.11.2018, 00:35
Помогаю со студенческими работами здесь

Oracle sql запросы
Тестовое задание на знание SQL Здравствуйте, прошу написать 5 SQL запросов по следующим пунктам: 1. Выбрать все документы, где...

Простые SQL запросы
Из таблицы ZIPCODE_INFO запросить zip_code, city, state в виде одного столбца. Разделить данные запятой. Пример: 400050, Mumbai, MH. Дать...

Запросы SQL ORACLE APEX
Написать запросы с использованием групповых (агрегатных) функций: 1.Вывести *для каждого названия хобби риск и количество различных...

запросы sql+ выборка из таблиц через связующую таблицу
Приветствую форумчан! Ситуация такая: Имеются таблицы Издания (код_издания,название,жанр,издательство,дата_выпуска), Авторы...

Sql запросы
Добрый день. Помогите написать sql запрос: На сколько в среднем доход семьи заемщиков с четным id, отличается от дохода семьи...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru