SQLite -Complex SELECT с несколькими объединениями - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть следующие примеры таблиц с соответствующими столбцами:

PEOPLE: PERSON_ID, FIRST_NAME, LAST_NAME, GUARDIAN_ID

STATUS: PERSON_ID, STATUS

ОБРАЗЕЦ ДАННЫХ:

PEOPLE:
    2345, George, Foreman, null
    4567, Joseph, Galagar, 2345
    5632, Jenner, Shooter, 2345

STATUS:
    2345, DISPATCHED
    4567, PENDING
    5632, PENDING

Учитывая вышесказанное, я хочу получить PERSON_ID из PEOPLE, где FIRST_NAME - это 'Джордж', также STATUS из этих людей из STATUS и, наконец, количество детей у каждого из этих людей. имеет (другими словами рассчитывать на PEOPLE, где PERSON_ID является GUARDIAN_ID).

Как бы я это сделал? Я очень ржавый в этой области. Это плохой пример, но он должен помочь с моей реальной проблемой.

Учитывая вышеизложенное, я должен получить следующий результат:

2345, DISPATCHED, 2

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

или для упрощения и сохранения вложенного выбора,

select p.PERSON_ID, max(s.STATUS) as status, 
sum (case when kids.person_id is null then 0 else 1 end) as num_children
from PEOPLE p
left join PEOPLE kids on kids.GUARDIAN_ID = p.PERSON_ID
join STATUS s on s.PERSON_ID = p.PERSON_ID
where p.FIRST_NAME = 'George'
group by p.PERSON_ID
0 голосов
/ 27 апреля 2018

Попробуйте это:

CREATE TABLE PEOPLE(PERSON_ID INT, FIRST_NAME VARCHAR(25), LAST_NAME VARCHAR(25), GUARDIAN_ID INT);

INSERT INTO PEOPLE VALUES(2345, 'George', 'Foreman', null);
INSERT INTO PEOPLE VALUES(4567, 'Joseph', 'Galagar', 2345);
INSERT INTO PEOPLE VALUES(5632, 'Jenner', 'Shooter', 2345);

CREATE TABLE STATUS(PERSON_ID INT, STATUS VARCHAR(25));

INSERT INTO STATUS VALUES(2345, 'DISPATCHED');
INSERT INTO STATUS VALUES(4567, 'PENDING');
INSERT INTO STATUS VALUES(5632, 'PENDING');

Используя запрос, мы получаем результат:

SELECT P.PERSON_ID
    ,MAX(S.STATUS)STATUS
    ,MAX(D.Counts)[No of Children]
FROM PEOPLE P
JOIN STATUS S ON S.PERSON_ID = P.PERSON_ID
JOIN(SELECT GUARDIAN_ID, COUNT(1)Counts FROM PEOPLE GROUP BY GUARDIAN_ID) D ON D.GUARDIAN_ID = P.PERSON_ID
WHERE P.FIRST_NAME = 'George'
GROUP BY P.PERSON_ID

Выход:

PERSON_ID   STATUS      No of Children
2345        DISPATCHED  2

Проверьте это в # SQL Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...