2013-04-09 2 views
1

У меня есть две таблицы T1 и T2SQL объединения с пустым столом с "Не равно" Оператор

T1 с колоннами ID & данные

T2 с колоннами ID & T1_id

я хочу присоединиться к T1 .id с T2.T1_id

я хочу все записи T1, чей идентификатор не присутствует в Т2 т.е. T1.id <> T2.T1_id

так что если Т2 пусто все записи T1 должна быть извлечена

Проблема заключается в том

  1. если я использовать LEFT JOIN ден все записи T1 ид быть неправдоподобным даже если запись с соответствующими T1_id является присутствует в T2.
  2. , если я не использую левый присоединиться все работает, за исключением, когда Т2 пусто, то никакие записи не будут выбраны

также я любил бы LinQ эквивалент.

ответ

3

Вы находитесь рядом с тем, что хотите. LEFT JOIN будет достаточно, и в вашем заявлении будет отсутствовать только условие WHERE.

SELECT a.* 
FROM T1 a 
     LEFT JOIN T2 b 
      ON a.ID = b.T1_ID 
WHERE b.T1_ID IS NULL 

вот LINQ версия:

var _result = from a in T1 
       join b in T2 on a.ID equals b.T1_ID into b_join 
       from b in b_join.DefaultIfEmpty() 
       where b.T1_ID == null 
       select a; 
Смежные вопросы