Получить ТОП-строки из дочерней таблицы с внутренним соединением - PullRequest
0 голосов
/ 21 декабря 2009

Я хочу внутреннее соединение с дочерней таблицей на основе идентификатора и получить верхнюю строку дочерней таблицы, Я не присоединяюсь к тому, чтобы извлекать какие-либо данные из дочерней таблицы, я просто проверяю, существует ли запись дочерней таблицы для родительской таблицы. Если я не включу строку TOP, есть вероятность получить несколько строк родителя в наборе результатов.

- Возможны несколько строк в наборе результатов для одного и того же PARENTID

ВЫБРАТЬ P.PARENTID ОТ РОДИТЕЛЯ P
ВНУТРЕННИЙ РЕЙТИНГ C НА C.PARENTID = P.PARENTID и C.ISACTIVE = 1

Мне нужно что-то вроде

ВЫБРАТЬ P.PARENTID ИЗ РОДИТЕЛЯ P
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБЕРИТЕ ТОП 1 * ОТ РЕБЕНКА) КАК C
ON C.PARENTID = P.PARENTID И C.ISACTIVE = 1

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

Ответы [ 3 ]

6 голосов
/ 21 декабря 2009

Как вы думаете, ГДЕ ЕСТЬ сделает работу?

SELECT P.PARENTID FROM PARENT P 
WHERE EXISTS (SELECT 1  FROM CHILD C 
WHERE C.PARENTID = P.PARENTID 
AND C.ISACTIVE = 1)
0 голосов
/ 21 декабря 2009

Возможно, не самый эффективный способ, но:

SELECT p.parentid FROM parent p
WHERE (SELECT COUNT(*) FROM child c WHERE c.parentid = p.parentid AND c.isactive)
    >= 1
0 голосов
/ 21 декабря 2009

Не лучше ли сделать что-то вроде этого:

SELECT * FROM parent WHERE parentId not in ( select parentid from child where isactive = 1 )

Сделав это, вы получите список всех записей в «parent», которые не имеют связанных записей в «child».

Чтобы найти родителей, у которых есть записи о ребенке, просто измените критерии:

select * from parent where parentId in ( select distinct parentId from  child where isactive = 1 )

Я указал здесь разные, чтобы быть уверенным, что каждый parentId указан только один раз, так что сам родитель также возвращается только один раз в наборе результатов.

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