powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Просьба помочь сделать выборку
4 сообщений из 4, страница 1 из 1
Просьба помочь сделать выборку
    #39255044
Viacheslav_mihalich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер,

Есть таблица:
|--id--|----------name---------|--is_child--|-id_clinic--|-id_doctor-|
--------------------------------------------------------------------
|--1--|-Иванов Иван Иванович-|--true-----|----1-----|----1------|
|--2--|-Иванов Иван Иванович-|--true-----|----2-----|----1------|
|--3--|-Иванов Иван Иванович-|--false---- |----1-----|----2----- |
|--4--|-Петров Петр Петрович- |--true-----|----1-----|----3----- |
|--5--|-Петров Петр Петрович-|--false-----|----2-----|----4----- |
|--6--|-Петров Петр Петрович-|--false-----|----3-----|----4----- |
...

У детского и взрослого докторов разные id
Доктор Иванов Иван Иванович принимает детей в клинике 1 и 2, взрослых - только в 1
Доктор Петров Петр Петрович принимает детей в клинике 1, взрослых - клиниках 1 и 2.

Просьба помочь выбрать доктора по ФИО рядом с id как детского, так и взрослого:

|--id_doctor1--|--id_doctor2--|----------name---------|
--------------------------------------------------------
|-------1------|-------2------|-Иванов Иван Иванович|
|-------3------|-------4------|-Петров Петр Петрович |
...
Рейтинг: 0 / 0
Просьба помочь сделать выборку
    #39255296
Viacheslav_mihalich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уточняю задачу:

Есть таблица с докторами, в ней:
1. доктора, работающие как с детьми, там и со взрослыми. Это 2 отдельных записи с разными doctor_id. При этом как взрослый и как детский доктор может работать в разных клиниках.
2. доктора, работающие только с детьми.
3. доктора, работающие только со взрослыми.

Нужно по ФИО выбрать именно тех докторов, которые работают как детским, так и взрослым доктором одновременно.
Иванов и Петров как раз такие доктора, и рядом с их ФИО нужно выбрать их id_doctor1 (id детского доктора) и id_doctor2 (id взрослого доктора). Тех докторов, которые только детские или только взрослые, выводить не нужно.
По сути id_clinic не играет роли. Имеет значение только признак is_child.

Могу выбрать только отдельно взрослых, одновременно детских с их id:
Код: plsql
1.
2.
3.
4.
5.
6.
SELECT distinct("DOCTOR_ID"), "NAME", "IS_CHILDRENS"
FROM "TABLE" 
WHERE "IS_CHILDRENS" is false -- взрослые доктора
AND "NAME" in -- все совпадения взрослых и детских докторов по ФИО
(SELECT "NAME" FROM "TABLE" WHERE "IS_CHILDRENS" is true)
ORDER BY d."NAME"



И также только детских, одновременно взрослых с их id:
Код: plsql
1.
2.
3.
4.
5.
6.
SELECT distinct("DOCTOR_ID"), "NAME", "IS_CHILDRENS"
FROM "TABLE" 
WHERE "IS_CHILDRENS" is true -- детские доктора
AND "NAME" in -- все совпадения взрослых и детских докторов по ФИО
(SELECT "NAME" FROM "TABLE" WHERE "IS_CHILDRENS" is false)
ORDER BY d."NAME"



Теперь осталось склеить эти результаты по ФИО доктора.

Возможно ли все это сделать одним запросом?
...
Рейтинг: 0 / 0
Просьба помочь сделать выборку
    #39256001
maxkar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Viacheslav_mihalich,

Join же, не? Ну и плюс удалить лишние условия из запросов.
Что-то вроде
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SELECT DISTINCT doc1.id_doctor as id_doctor1, doc2.id_doctor as id_doctor2, doc1.name
FROM 
  (SELECT id_doctor, name FROM "TABLE" WHERE is_childrens) doc1
JOIN
  (SELECT id_doctor, name FROM "TABLE" WHERE NOT is_childrens) doc2
ON
  doc1.name = doc2.name


Может быть, DISTINCT можно в подзапросы перенести, нужно планы запроса смотреть.

Доктора будут размножаться, если у них id_doctor в разных клиниках разные. Но тут уже с постановкой задачи нужно разбираться.
...
Рейтинг: 0 / 0
Просьба помочь сделать выборку
    #39256627
Viacheslav_mihalich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maxkar,
Cпасибо!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Просьба помочь сделать выборку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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