我正在使用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.empidtable2.nametable2.surname 正确。

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

我在这里需要的是,还要以零值以及何时获得“行” table1.empid null我需要将自定义值设置为 table2.nametable2.surname.

我一直在和isnull()一起玩,但我所做的就是使它甚至更糟糕。

有什么建议么?

谢谢

有帮助吗?

解决方案

您需要做一个左联接:

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

其他提示

尝试使用联盟:

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

如果表1为null,并且您仍然需要无法开始的记录。从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
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不是零的时候,这也将包括人,但是如果他们在表1中有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
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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top