Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
8 / 8 / 0
Регистрация: 20.04.2013
Сообщений: 39

Рекурсивный SELECT

27.01.2014, 17:32. Показов 1360. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть таблица:
SQL
1
2
3
4
5
6
CREATE TABLE VALUE(
        id SERIAL PRIMARY KEY
    , content TEXT NOT NULL
    , KEY TEXT DEFAULT NULL
    , value_id INT4 REFERENCES VALUE(id)
);
в ней хранится однонаправленный список.

то есть, тот, у которого value_id = NULL - первый элемент;
все остальные - ссылаются на предыдущий.

как получить весь список?

я так понял, надо курить в сторону
SQL
1
WITH RECURSIVE
но оседлать пока не удалось.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.01.2014, 17:32
Ответы с готовыми решениями:

Рекурсивный запрос
Добрый день. Есть таблица: Есть 3 типа описания столбцов: 1. Страна (Type_id = 1); 2. Область / Штат 3. Город Нужно...

Рекурсивный и не рекурсивный метод написания кода
Объясните пожалуйста, чем отличаются два таких метода. Желательно с примерами.

Как изменить значение одного select-а при изменении другого select-а?
Добрый день! Подскажите как изменить значение select при изменении другого select. первый: <select id="options"> ...

5
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
28.01.2014, 16:54
Лучший ответ Сообщение было отмечено some_stuff как решение

Решение

Плохая идея называть таблицы и поля словам, схожими с ключевыми словами в sql.
Заменил: таблицу VALUE на liststorage, id на ls_id, content на ls_content, key на ls_key и value_id на prev_id (это заменил, чтобы былдо понятнее, что за поле)

Тогда запрос должен быть примерно такой:

SQL
1
2
3
4
5
6
7
WITH recursive previtem(lsid, lscontent, lskey, lsprev) AS
(
    SELECT * FROM liststorage ls WHERE ls.ls_id = 1 AND ls.ls_prev IS NULL
UNION ALL
    SELECT ls.ls_id, ls.ls_content, ls.ls_key, ls.ls_prev FROM liststorage ls, previtem pi WHERE ls.ls_prev = pi.lsid
)
SELECT * FROM previtem;
1
8 / 8 / 0
Регистрация: 20.04.2013
Сообщений: 39
28.01.2014, 17:17  [ТС]
Цитата Сообщение от grgdvo Посмотреть сообщение
Тогда запрос должен быть примерно такой:
да, так и есть.
спасибо.

Цитата Сообщение от grgdvo Посмотреть сообщение
Плохая идея называть таблицы и поля словам, схожими с ключевыми словами в sql.
нет, не плохая, а очень и очень хорошая так как, postgresql, в отличие от mysql, прекрасно поддерживает такой синтаксис.
плохая идея - давать атрибутам домена названия, содержащие избыточную информацию, повторяющиеся элементы, сокращения, отсылки к имени домена, ...
всё это серьёзно осложняет чтение запросов.
а чтение длинных запросов обычно делает вообще бесперспективным.
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
29.01.2014, 02:49
Цитата Сообщение от some_stuff Посмотреть сообщение
нет, не плохая, а очень и очень хорошая так как, postgresql, в отличие от mysql, прекрасно поддерживает такой синтаксис.
Впечатлен! Но... Рекомендую прочитать это. Еще можно использовать двойные кавычки, чтобы постгрес окончательно не запутался в лексике таких выражений. И вы просто еще не сталкивались. _Самый_ банальный пример.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE a
(
  a_id serial,
  CONSTRAINT INTEGER,
  CONSTRAINT a_pk PRIMARY KEY(a_id)
);
 
CREATE TABLE a
(
  a_id serial,
  "constraint" INTEGER,
  CONSTRAINT a_pk PRIMARY KEY(a_id)
);
Добавлено через 11 минут
И еще немного дополню... Погуглите запрос "правила именования объектов базы данных". Выйдет достаточно неплохая подборка, возможно что-то подчерпнете для себя.
1
8 / 8 / 0
Регистрация: 20.04.2013
Сообщений: 39
29.01.2014, 10:47  [ТС]
Цитата Сообщение от grgdvo Посмотреть сообщение
И вы просто еще не сталкивались. _Самый_ банальный пример.
сталкивался очень редко потому, что, почти все инструменты составления запросов, с которыми я работаю,
поддерживают автоматическую расстановку кавычек;
в командной с строке запросов почти не пишу.
тем не менее, всегда держу в голове возможную необходимость кавычек;
при этом, ни в чём себя не ограничиваю))
а
Цитата Сообщение от grgdvo Посмотреть сообщение
уже читал)

Цитата Сообщение от grgdvo Посмотреть сообщение
Погуглите запрос "правила именования объектов базы данных".
а вот за это - огромное спасибо.
реально доставило))
извлёк гигатонны лулзов;
валялись под столом всем отделом.

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

про
SQL
1
AS
видимо, вообще никто не слышал.

вобщем, если найдёте в инете ещё какую-нибудь ржаку по сабжу, с удовольствием почитаем.
1
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
30.01.2014, 17:17
Спасибо за критику. Я рад, что доставил столько удовольствия целом отделу.
Но вы все же вдумчиво прочтите, хотя бы некоторые мысли, которые совсем не лешены смысла.
А потом мы с вами вместе посмеемся и над схемами, и над пространствами имен, и над областями видимости.....
Да много над чем можно посмеяться! Ржаки хватает, тут вы правы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.01.2014, 17:17
Помогаю со студенческими работами здесь

Сохранение значения select и работоспособность второго select после отправки формы
Добрый вечер!Есть проблемка-не могу сохранить значение селекта,сохранив работоспособность др.селектов после отправки формы....страну...

Сохранение значения select и работоспособность второго select после отправки формы
Добрый вечер!Есть проблемка-не могу сохранить значение селекта,сохранив работоспособность др.селектов после отправки формы....страну...

Как при изменении одного <select> подгрузить в другой <select> данные...
Как при изменении одного &lt;select&gt; подгрузить в другой &lt;select&gt; данные... пример: с марками машин. При выборе 'TOYOTA'...

Как отображать определенные данные в <select> в зависимости от значений в другом <select>?
Здравствуйте! У меня на страницу есть два &lt;select&gt;. В каждом из них располагаются даты в формате dd.mm.yyyy. &lt;select...

При выборе элемента в <select> менять содержимое другого <select>
Может кто-то подсказать. У меня есть select на форме. Например: &lt;select name=day_s size=1&gt; &lt;option value=1&gt; Понедельник &lt;/...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru