2015-02-10 59 views
0

下面是我的表格結構(足以顯示我需要完成的內容)的一小段代碼,並且我無法獲得正確的語法來實現我的最終結果。我需要完成的是顯示來自#newdatabase的所有記錄(這是簡單的部分,一個select *語句),並且如果#olddatabase中存在記錄,只有在僱員姓名爲null時,纔會排除它。我試過這個查詢,但沒有返回結果集。使用在哪裏加入?

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存在或2),如果他們在#olddatabase存在, employeename爲空。 Des澄清?

+1

要從您發佈的示例數據中獲得什麼結果? (我不確定我是否理解你在找什麼,因爲你發佈的SELECT與你的描述不符。) – 2015-02-10 18:28:19

+0

@KenWhite我想在#newdatabase中看到記錄,其中1)它們不存在於#olddatabase中或2)如果它們存在於#olddatabase中並且employeename爲null。 Des澄清? – 2015-02-10 18:31:05

+0

請編輯您的文章,並根據您發佈的樣本數據(在文本列表中)顯示您期望得到的確切結果*。你的SQL仍然不符合你的描述,如果你只是簡單地發表一個代表你希望從樣本數據中得到的結果的表格,那麼你很清楚你在問什麼。 – 2015-02-10 18:34:29

回答

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運算符默認情況下只選擇不同的值。要允許重複值,請在ALLION中使用ALL關鍵字(source