2015-02-10 69 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