2015-02-10 5 views
0

Ниже представлен небольшой фрагмент моей структуры таблицы (достаточно, чтобы показать, что мне нужно выполнить), и я не могу получить правильный синтаксис для достижения моего конечного результата. То, что мне нужно выполнить, - показать все записи из #newdatabase (это простая часть, инструкция select *) И если запись существует в #olddatabase, ТОЛЬКО исключить ее, если это значение null для useeename. Я пробовал этот запрос, но не возвращаемый набор результатов, который мне нужен.Использование A Where In Join?

Select #newdatabase.orderID 
FROM #newdatabase 
LEFT JOIN #oldDatabase 
ON #oldDatabase.orderID = #newdatabase.oldorderID 
WHERE #oldDatabase.orderID IS NULL 
AND #oldDatabase.employeename IS NULL 

Вот моя структура таблицы

Create Table #oldDatabase 
(
    orderID int, 
    employeename varchar(100) 
) 

Create Table #newdatabase 
(
    orderID int, 
    oldorderID int 
) 

INSERT INTO #oldDatabase Values 
(1, NULL),(2, NULL),(3, 'Mitch'),(4,'Sam'),(5, 'Streith'),(6, 'Azul'),(7,'Reta'),(8,'Frank'),(9,'Fred'),(10,'Nick'), 
(11, NULL),(12, NULL),(13, NULL), (14, NULL), (15, NULL), (16, NULL) 

INSERT INTO #newdatabase Values 
(100,1), (101,2), (102,3), (103,4), (104,5), (105,6), (106,7), (107,8),  (108,9), 
(109,10), (110,11), (111,12), (112,13), (113,Null),(114,Null), (115,NULL), (116,NULL), 
(117,Null), (118,Null), (119,Null), (120,Null), (121,Null), (122,Null), (123,Null) 

РЕДАКЦИЯ - Я хочу видеть записи в #newdatabase где либо 1) они не существуют в #olddatabase OR 2), если они существуют в #olddatabase и employeename - null. Des, которые уточняют?

+1

Какие результаты вы хотели бы получить из данных образца, которые вы опубликовали? (Я не уверен, что я вполне понимаю, что вы ищете, потому что SELECT, который вы опубликовали, не соответствует вашему описанию.) –

+0

@KenWhite Я хочу видеть записи в #newdatabase, где либо 1) они не существуют в #olddatabase ИЛИ 2), если они существуют в #olddatabase, а employeeeename - null. Des, которые уточняют? –

+0

Пожалуйста, отредактируйте ваше сообщение и покажите * точные результаты *, которые вы ожидаете от данных образца, которые вы опубликовали (в текстовой таблице). Ваш SQL все еще не соответствует вашему описанию, и если вы просто опубликуете таблицу, представляющую результаты, которые вы хотите получить из ваших данных образца, было бы ясно, что вы просите. –

ответ

0

Там в несколько способов, вы можете достигнуть этого, я рекомендую первый:

Select #newdatabase.orderID 
     FROM #newdatabase 
LEFT JOIN #oldDatabase 
     ON #oldDatabase.orderID = #newdatabase.oldorderID 
     AND #oldDatabase.employeename IS NOT NULL 
    WHERE #oldDatabase.orderID IS NULL 

Или

Select #newdatabase.orderID 
     FROM #newdatabase 
LEFT JOIN #oldDatabase 
     ON #oldDatabase.orderID = #newdatabase.oldorderID 
    WHERE #oldDatabase.employeename IS NULL 

Или

Select #newdatabase.orderID 
     FROM #newdatabase 
    WHERE #newdatabase.orderID NOT IN 
      (SELECT #oldDatabase.orderID 
       FROM #oldDatabase 
       WHERE #oldDatabase.employeename IS NOT NULL) 
0

Пожалуйста, попробуйте ниже.

(Select #newdatabase.orderID 
FROM #newdatabase 
EXCEPT 
SELECT #oldDatabase.orderID 
FROM #oldDatabase) 
UNION 
SELECT #oldDatabase.orderID 
FROM #oldDatabase 
AND #oldDatabase.employeename IS NULL 

Оператор UNION по умолчанию выбирает только разные значения. Чтобы разрешить повторяющиеся значения, используйте ключевое слово ALL с UNION. (source)

Смежные вопросы