2014-12-03 3 views
0

У меня есть две таблицы (таблица1 - главная таблица, таблица2 - таблица подробностей). Как я могу выбрать (просмотреть) только те записи из главной таблицы, у которых нет записей в таблице подробностей? Какой SQL-оператор я могу использовать для этого? Я использую MS SQL Server 2012.SQL - Как выбрать основные записи, у которых нет подробных записей?

Edit: Таблица определения

Table1ID (PK) Table2 - ID (PK), Table1ID (FK)

+0

ли записи в двух таблицах один и тот же ID? –

+0

Таблица 1 - идентификатор (PK) и таблица2 [идентификатор (PK), таблица 1ID (FK)] – Tracer

ответ

3

Использование NOT IN Оператор

SELECT * 
    FROM Table1 
    WHERE ID NOT IN(SELECT Table1ID 
          FROM Table2) 
2

Я хотел бы использовать NOT EXISTS, так как это ясно , эффективный и не имеет проблем с нулевыми столбцами.

Например (MasterID является PK/FK):

SELECT master.* 
FROM dbo.Table1 master 
WHERE NOT EXISTS 
(
    SELECT 1 FROM Table2 detail 
    WHERE detail.MasterID = master.MasterID 
) 

Но у вас есть другие варианты: http://sqlperformance.com/2012/12/t-sql-queries/left-anti-semi-join

1

Как насчет использования эксклюзивного (левого) внешнего соединения?

SELECT 
     master.* 
FROM 
     master LEFT OUTER JOIN details 
ON master.ID = details.masterID   
WHERE details.ID IS NULL; 

Посмотрите here для более подробного описания, почему этот запрос является решением такого рода проблем.

0

Я предпочитаю использовать левый включается в таких случаях:

select tp.* 
from table_parent tp 
     left join table_child tc on tc.parent_id = tp.id 
where tc.parent_id is null 
Смежные вопросы