2015-06-09 4 views
0

У меня есть одна таблица для contributions и другая таблица для profiles. Я хочу select all profiles, не имеющих ассоциированных отчётов.Выберите все значения в одном столбце, которые не находятся в столбце другой таблицы

Я могу присоединиться к двум столам на contributions.profiles_id = profiles.id.

Действительно оцените любую помощь!

+2

Это обычно достигается с 'НЕ EXISTS' и коррелированный подзапрос, или 'LEFT JOIN', а затем обнаружение отсутствующих объединений путем сравнения любого столбца правой таблицы с нулем. – StuartLC

ответ

1
Try this. 

select p.* from profiles p 
left join contributions c on p.profile_id=c.profie_id 
where c.profile_id is NULL ; 
+0

, предполагая, что c.profile_id не является столбцом с нулевым значением, я бы пошел с этим. если он является нулевым, я бы предложил вместо него использовать 'not exist'. –

0

* Запрос, что вам нужно:

SELECT 
    colA, 
    colB, 
    .... 
FROM contributions tb1 
WHERE 
    NOT EXISTS (SELECT * from profiles tb2 where tb1.profiles_id = tb2.id) 
GROUP BY 
    colA, 
    colB, 
    .... 
+0

вы также можете использовать не IN.'INSERT INTO TABLEA ( col1, col2 ) Выберите Колы colB, .... ИЗ взносы ТВ1 ГДЕ tb1.profiles_id NOT IN (SELECT Tb2 .id из профилей tb2 group по tb2.id) GROUP BY colA, colB, .... ; ' –

+0

Вы не отвечаете на вопрос. INSERT - не ответ. – jarlh

+0

@ ZoharPeled, зависит от используемого dbms. (Здесь никто не указан ...) – jarlh

2

Использование NOT EXISTS найти профили, которые не имеют никаких связанных взносов:

select * from profiles p 
where NOT EXISTS (select 1 from contributions c 
        where c.profiles_id = p.id); 
Смежные вопросы