3

我正在使用 C# 和 SQL Server。

看看下面的 SQL:

SELECT table1.id, table1.description, table2.name, table2.surname 
FROM table1 
    INNER JOIN table2 ON table1.EmpID = table2.EmpID

这是直截了当的,工作正常。它可以很好地从 table1 表中检索数据,table1.empid并且table2.name正确table2.surname地进行内部连接。

现在,有时table1.empid为空,当它为空时,此 SQL 只是忽略具有空值的“行”;根据标准,这很正常。

我在这里需要的是还获得具有空值的“行”,当table1.empid为空时,我需要将自定义值设置为table2.nameand table2.surname

我一直在玩 isnull() 但我所做的只是让它变得更糟。

有什么建议么?

谢谢

4

5 回答 5

10

你需要做一个左联接:

SELECT table1.id, table1.description, table2.name, table2.surname FROM table1
LEFT JOIN table2 ON table1.EmpID = table2.EmpID;
于 2011-04-27T20:35:14.380 回答
0

尝试使用 UNION:

SELECT table1.id, table1.description, table2.name, table2.surname 
FROM table1 
INNER JOIN table2 ON table1.EmpID = table2.EmpID
UNION
SELECT table1.id, table1.description, 'Table 2 Null', 'Table 2 Null'
FROM table1
WHERE table1.empId is null
于 2011-04-27T20:36:10.237 回答
0
Select table1.id table1.description
    , Case When table1.EmpID Is Null Then 'Some Value' Else table2.name End As Table2Name
    , Case When table1.EmpID Is Null Then 'Some Value' Else table2.surname End As Table2Surname
From table1
    Left Join table2
        On table2.EmpID = table1.EmpID
Where table1.EmpID Is Null
        Or table2.EmpID Is Not Null
于 2011-04-27T20:37:07.007 回答
0

如果表 1 为空,并且您仍然需要无法从该表开始的记录。从 table2 开始,加入 table1。

SELECT table1.id, table1.description, ISNULL(table1.empid, "some new value") AS name, table2.surname 
FROM table2 
    LEFT OUTER JOIN table1 ON table2.EmpID = table1.EmpID
于 2011-04-27T20:37:20.677 回答
0
SELECT table1.id
       ,table1.description
       ,COALESCE(table2.name, 'DEFAULT') AS name
       ,COALESCE(table2.surname, 'DEFAULT') AS surname
FROM table1 
LEFT JOIN table2
    ON table1.EmpID = table2.EmpID

现在请注意,当 EmpID 不为 null 但如果他们在 table1 中有 EmpID 但在 table2 中找不到它时仍然“无效”时,这也将包括人,所以如果这是你想避免的事情,另一个选项是这个:

SELECT table1.id
       ,table1.description
       ,table2.name
       ,table2.surname
FROM table1 
INNER JOIN table2
    ON table1.EmpID = table2.EmpID

UNION ALL

SELECT table1.id
       ,table1.description
       ,'DEFAULT' AS name
       ,'DEFAULT' AS surname
FROM table1 
WHERE table1.EmpID IS NULL
于 2011-04-27T20:42:22.850 回答