powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Получение данных из двух таблиц, связанных с одной общей
4 сообщений из 4, страница 1 из 1
Получение данных из двух таблиц, связанных с одной общей
    #39802922
Benderbej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем! Я с Postgres-ом еще только знакомлюсь. Мне нужно выполнить задачу, а я даже не знаю с какой стороны подходить к ее решению.
У меня есть три таблицы Users, Groups, Urls.
Users связана один к одному с Urls
Groups связана один к одному с Urls
У Urls есть Urls.id, Urls.url
У Users есть Users.urls_id -внешний ключ
У Groups есть Group.urls_id -внешний ключ

Мне нужен такой запрос, который бы по Urls.url смотрел есть ли данные по данному url в Users, и есть ли в Groups и выводил бы айдишник юзера или группы. Также, желательно чтобы из запроса было понятно Чей это айдишник, группы или юзера..
(то есть изначально не ясно в какой таблице Users или Groups будет связанная с Urls запись)

Интересует вопрос по оптимизации этого дела, хотелось бы уместить все в один запрос и работало как можно быстрее. Мои ковыряния навели меня пока на такие вещи...

SELECT groups.id, groups.url_id, urls.url FROM groups JOIN urls ON groups.url_id = urls.id WHERE urls.url = 'someurl';
SELECT user.id, users.url_id, urls.url FROM users JOIN urls ON users.url_id = urls.id WHERE urls.url = 'someurl';

как это объединить и по правильному пути ли я иду, я не понимаю...
...
Рейтинг: 0 / 0
Получение данных из двух таблиц, связанных с одной общей
    #39802946
Benderbej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал через CASE, вроде работает как надо, но какое-то пугающее нагромождение запросов получилось, и непонятно какой из айдишников возвращен

Код: plsql
1.
2.
3.
4.
5.
SELECT
CASE 
WHEN (SELECT EXISTS (SELECT Users.url_id, urls.url FROM Users JOIN urls ON Users.url_id = urls.id WHERE urls.url = 'someurl')) THEN (SELECT Users.url_id FROM Users JOIN urls ON Users.url_id = urls.id WHERE urls.url = 'someurl')
WHEN (SELECT EXISTS (SELECT Groups.url_id, urls.url FROM Groups JOIN urls ON Groups.url_id = urls.id WHERE urls.url = 'someurl')) THEN (SELECT Groups.url_id FROM Groups JOIN urls ON Groups.url_id = urls.id WHERE urls.url = 'someurl')
END
...
Рейтинг: 0 / 0
Получение данных из двух таблиц, связанных с одной общей
    #39803004
Benderbej
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Benderbej,
вопрос решен, спасибо)
...
Рейтинг: 0 / 0
Получение данных из двух таблиц, связанных с одной общей
    #39803161
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BenderbejПривет всем! Я с Postgres-ом еще только знакомлюсь. Мне нужно выполнить задачу, а я даже не знаю с какой стороны подходить к ее решению.
У меня есть три таблицы Users, Groups, Urls.
Users связана один к одному с Urls
Groups связана один к одному с Urls
У Urls есть Urls.id, Urls.url
У Users есть Users.urls_id -внешний ключ
У Groups есть Group.urls_id -внешний ключ

Мне нужен такой запрос, который бы по Urls.url смотрел есть ли данные по данному url в Users, и есть ли в Groups и выводил бы айдишник юзера или группы. Также, желательно чтобы из запроса было понятно Чей это айдишник, группы или юзера..
(то есть изначально не ясно в какой таблице Users или Groups будет связанная с Urls запись)

Интересует вопрос по оптимизации этого дела, хотелось бы уместить все в один запрос и работало как можно быстрее. Мои ковыряния навели меня пока на такие вещи...

SELECT groups.id, groups.url_id, urls.url FROM groups JOIN urls ON groups.url_id = urls.id WHERE urls.url = 'someurl';
SELECT user.id, users.url_id, urls.url FROM users JOIN urls ON users.url_id = urls.id WHERE urls.url = 'someurl';

как это объединить и по правильному пути ли я иду, я не понимаю...

почему не UNION?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Получение данных из двух таблиц, связанных с одной общей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]