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.nametable2.surname

現在、table1.empidnull の場合があり、その場合、この SQL は null 値を持つ「行」を無視します。これは、基準に基づいてかなり正常です。

ここで必要なのは、null 値を持つ「行」も取得することです。table1.empidが null の場合は、カスタム値をtable2.nameandに設定する必要がありtable2.surnameます。

私は isnull() で遊んでいますが、私がしたことはそれをさらに悪化させることだけです。

助言がありますか?

ありがとう

4

5 に答える 5

10

LEFT JOIN を実行する必要があります。

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 が 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
于 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 ではないにもかかわらず、テーブル 1 に EmpID があり、テーブル 2 に見つからない場合は「無効」な人も含まれることに注意してください。これを回避したい場合は、別のオプションがこれです。 :

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 に答える