Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/88: Рейтинг темы: голосов - 88, средняя оценка - 4.95
15 / 2 / 1
Регистрация: 18.09.2015
Сообщений: 227

missing FROM-clause entry for table. Postgres

15.06.2020, 23:48. Показов 17272. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Возникла ошибка:
SQL
1
2
ERROR:  missing FROM-clause entry FOR TABLE "a"
LINE 4: ...OM forum_album WHERE (forum_album.creation_date = A.creation..
При попытке выполнения запроса:
SQL
1
2
3
4
5
WITH A AS (SELECT forum_album.title_id, MAX(forum_album.creation_date) AS creation_date FROM forum_album
WHERE forum_album.owner_id_id = 2 GROUP BY forum_album.title_id),
C AS (SELECT forum_album.title_id, forum_album.photo, forum_album.creation_date 
FROM forum_album WHERE (forum_album.creation_date = A.creation_date AND forum_album.title_id = A.title_id))
SELECT * FROM forum_albums AS B LEFT JOIN C ON B.title_id=C.title_id WHERE (B.owner_id_id = 2);
Не очень понимаю, где именно Postgres просит указать оператор FROM. И в целом не особо понятно, почему СУБД не может использовать значения полей таблицы A, ведь оператором WITH она создается, и по сути должна быть доступна для дальнейших взаимодействий с ней.

Помогите, пожалуйста, разобраться и решить проблему.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.06.2020, 23:48
Ответы с готовыми решениями:

Возникла ошибка Error 1093. You can't specify target table 'Flight' for update in FROM clause
Такая ошибка возникла при таком запросе: update Flight set free_seats = free_seats-1 where idFlight = 'A 341'; Суть ошибки я понял,...

DELETE: "You can't specify target table for update in FROM clause"
Здравствуйте! Задание: удалить все записи из таблицы cus, в которых длина поля город таблицы фирм-покупателей превышает среднюю длину...

Error or missing database (no such table: users)
Здравствуйте! Вот часть моего кода: import java.sql.*; class SQLClient { private static Connection connection; ...

8
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
16.06.2020, 10:46
уберите большие буквы из псевдонимов таблиц и CTE

Добавлено через 31 секунду
замените маленькими, и лучше использовать больше чем одну букву, чтобы не было случайной неоднозначности
0
15 / 2 / 1
Регистрация: 18.09.2015
Сообщений: 227
16.06.2020, 11:22  [ТС]
Заменил большие буквы на маленькие, не помогло. Остаётся та же ошибка.
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
16.06.2020, 14:26
А! ну так из одного CTE нельзя напрямую ссылаться в другой CTE.
Вы видимо в "c" хотели написать FROM a.
Зачем вам второй раз forum_album шерстить??
0
15 / 2 / 1
Регистрация: 18.09.2015
Сообщений: 227
16.06.2020, 18:30  [ТС]
Цитата Сообщение от grgdvo Посмотреть сообщение
А! ну так из одного CTE нельзя напрямую ссылаться в другой CTE
Такая же ошибка была и тогда, когда второй СТЕ прописывался как подзапрос, вне конструкции WITH ... AS ...
Цитата Сообщение от grgdvo Посмотреть сообщение
Зачем вам второй раз forum_album шерстить??
Есть таблица forum_album:
SQL
1
2
3
4
5
6
7
8
9
10
11
id |               photo                | owner_id_id | title_id |         creation_date         
----+------------------------------------+-------------+----------+-------------------------------
  6 | images/avreliy_JmlXnah.jpeg        |           2 | Кипр     | 2020-06-14 20:36:52.747169+03
  7 | images/epiktet_iArdxPI.jpeg        |           2 | Кипр     | 2020-06-14 20:36:52.747169+03
  8 | images/seneka_dGsotKx.jpeg         |           2 | Кипр     | 2020-06-14 20:36:52.747169+03
  9 | images/afrika_1_t37qqcL.jpeg       |           3 | Африка   | 2020-06-14 21:26:40.429191+03
 10 | images/afrika_2_h9FI9V4.jpg        |           3 | Африка   | 2020-06-14 21:26:48.300588+03
 11 | images/afrika_3_wNPDuhm.jpeg       |           3 | Африка   | 2020-06-14 21:26:53.593285+03
 12 | images/collisey_c5AflI7.jpg        |           2 | Рим      | 2020-06-14 23:21:26.93603+03
 13 | images/dzhek_uezerford_e865Fgu.jpg |           2 | Кипр     | 2020-06-14 23:43:12.519803+03
 14 | images/collisey_u4N9I2Z.jpg        |           2 | Кипр     | 2020-06-15 20:27:10.868565+03
В ней нужно выбрать последнее фото в каждом альбоме для данного пользователя. У Postgres ограничения на GROUP BY, и следующий запрос:
SQL
1
2
SELECT forum_album.title_id, forum_album.photo, MAX(forum_album.creation_date) FROM forum_album
WHERE forum_album.owner_id_id=2 GROUP BY forum_album.title_id, forum_album.photo HAVING forum_album.creation_date = MAX(forum_album.creation_date);
некорректен, поскольку поле forum_album.creation_date должно либо входить в агрегатную функцию, либо в условие GROUP BY.
И еще у меня сомнения по такому запросу:
1. В условии HAVING агрегатная функция будет вычисляться по группам или по всей таблице?
2. СУБД сможет по условию HAVING для даты создания фотографии отобрать записи forum_album.photo для каждой группы? Или надо также отдельно применять какое-то условие группировки для поля forum_album.photo?

Из-за всего вышеперечисленного, я решил сперва отобрать последние даты добавления фотографий в каждый альбом данного пользователя, а потом уже по этим датам и названиям альбомов найти соответствующие им фотографии.
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
17.06.2020, 08:17
SQL
1
2
3
4
5
6
7
8
9
SELECT 
owner_id, title, photo
FROM 
forum_album AS q
WHERE
q.creation_date >=
(SELECT MAX(creation_date)
 FROM forum_album AS subq
 WHERE subq.owner_id=q.owner_id AND subq.title=q.title)
1
15 / 2 / 1
Регистрация: 18.09.2015
Сообщений: 227
17.06.2020, 12:42  [ТС]
Цитата Сообщение от grgdvo Посмотреть сообщение
1
2
3
4
5
6
7
8
9
SELECT
owner_id, title, photo
FROM
forum_album AS q
WHERE
q.creation_date >=
(SELECT MAX(creation_date)
FROM forum_album AS subq
WHERE subq.owner_id=q.owner_id AND subq.title=q.title)
Спасибо большое. Т.е. здесь получается агрегатная функция MAX применяется к каждой группе, отобранной по условию WHERE?
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
17.06.2020, 13:07
хуже, она применяется к каждой записи.
я план запроса не строил, но предполагаю, что здесь будет seqscan (=полный перебор) таблицы в основном запрос и многократный seq scan (=полный перебор) таблицы во вложенном запросе с подсчетом значения агрегата и с последующей проверкой условия (когда условие ложно, запись просто отбрасывается, а перебор и подсчет в подзапросе делали напрасно).

Так что
с точки зрения простоты написания и понимания - это удобный запрос.
с точки зрения оптимальной работы - это отвратительный запрос, требующий оптимизации ))
0
15 / 2 / 1
Регистрация: 18.09.2015
Сообщений: 227
17.06.2020, 16:02  [ТС]
Цитата Сообщение от grgdvo Посмотреть сообщение
это отвратительный запрос, требующий оптимизации
Пока мне это нужно для учебного проекта. Но в теории это будет социальная сеть, поэтому и альбомов и фотографий может быть очень много.
Вроде бы получилось сделать через оконную функцию:
SQL
1
2
3
SELECT * FROM
(SELECT forum_album.photo, forum_album.title_id, forum_album.creation_date, MAX(forum_album.creation_date) OVER (PARTITION
BY forum_album.title_id) AS last_creation_date FROM forum_album WHERE forum_album.owner_id_id=1) AS T1 WHERE T1.creation_date = T1.last_creation_date;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.06.2020, 16:02
Помогаю со студенческими работами здесь

ERROR in The target entry-point "@angular/http" has missing dependencies
при компиляции проекта выдает ошибку: ERROR in The target entry-point "@angular/http" has missing dependencies: - @angular/core ...

Adding Entry Will Cause Text List To Exced 64k.entry Not Added
Вот такая ошибка выскакивает, понятно что идет переполнение rtitem Body, туда добавляеться куча DocLink через цикл Сам код привести не...

Ошибка с циклом Map.Entry entry:hashMap.entrySet
Пытаюсь спарсить сайт со списком и подробнее о каждом элементе. Всё делал по уроку на youtube. При запуске приложение как-бы пытается...

Как можно в <table id="tb1 </table> вписать w ??
У меня есть &lt;textarea id=&quot;t1 какой то текст &lt;/textarea&gt; Далее w=document.getElementById(&quot;t1&quot;).value.substr(0,5); И есть таблица...

Получение значения из определенной ячейки <table></table>
Помогите новичку получить значения из таблицы в richTextBox Получаю таблицу со страницы html вот так: HtmlElementCollection data...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru