2

SQL Server CEで列が異なる2つのテーブルを結合するにはどうすればよいですか?

私は2つのテーブルを持っています:

テーブルスケジュール

+-----+----------+------+
+ ID  + Name     + Type +
+-----+----------+------+
+ 1   + A        + 1    +
+ 2   + B        + 1    +
+ 3   + C        + 2    +
+-----+----------+------+

テーブルの説明

+-----+--------------------+
+ ID  + Description        +
+-----+--------------------+
+ 1   + A1 - XXXXX         +
+-----+--------------------+

そして、私が取得したいのは、次のようなテーブルです。

+-----+----------+-----------------+
+ ID  + Name     + Description     +
+-----+----------+-----------------+
+ 1   + A        + A1 - XXXXX      +
+ 2   + B        + -               +
+ 3   + C        + -               +
+-----+----------+-----------------+

IDがテーブルにない場合に、Description列に入力する場所。-Description

私はこのコードを試しました:

SELECT S.ID, D.Description 
FROM Schedule AS S 
INNER JOIN Description AS D

しかし、結果として:

+-----+----------+-----------------+
+ ID  + Name     + Description     +
+-----+----------+-----------------+
+ 1   + A        + A1 - XXXXX      +
+ 2   + B        + A1 - XXXXX      +
+ 3   + C        + A1 - XXXXX      +
+-----+----------+-----------------+

そして、私がON句を与えようとしたとき:

SELECT S.ID, D.Description 
FROM Schedule AS S 
INNER JOIN Description AS D ON S.ID = D.ID

次のように、がテーブルID上にある行を取得するだけです。Description

+-----+----------+-----------------+
+ ID  + Name     + Description     +
+-----+----------+-----------------+
+ 1   + A        + A1 - XXXXX      +
+-----+----------+-----------------+

どうやってやるの?


[アップデート]

私はこのコードを試しましたが、機能します:

SELECT  S.ID, S.Name, COALESCE (D.Description, '-') AS Description
FROM Schedule AS S 
LEFT OUTER JOIN Description AS D ON S.ID = D.ID

しかし今、どうすればそれにWHERE句を追加できますか(plsは上の表を参照してくださいSCHEDULE)?

私は試した:

SELECT  S.ID, S.Name, COALESCE (D.Description, '-') AS Description
FROM Schedule AS S 
LEFT OUTER JOIN Description AS D ON S.ID = D.ID AND S.Type = '1'

しかし、それでも行全体を取得します。

4

4 に答える 4

2

必要LEFT OUTER JOINです。

SQLFiddle:http ://sqlfiddle.com/#!3/7dccf/1

クエリ:

select s.ID, s.Name, Coalesce(d.description,'-') as description
from schedule s 
left outer join description d on d.id = s.id
于 2012-05-08T03:05:44.633 に答える
2

SQLServerCEの左外部結合

キーフィールドIDのテーブルScheduleDescriptionLEFT OUTER JOINを結合するためにを使用する必要があります。また、説明列のNULL値を次のように置き換えるために使用しますCOALESCE-

脚本:

SELECT          S.ID
            ,   S.Name
            ,   COALESCE (D.Description, '-') AS Description
FROM            Schedule AS S 
LEFT OUTER JOIN Description AS D 
ON              S.ID = D.ID

出力:

でテスト済みMicrosoft SQL Server CE version 4.0.8482.1

出力

WHERE句付き

JOINWHEREの後に句を追加する必要があります。を持つことを計画している場合は、句の後に来る必要があります。ORDER BYWHERE

脚本:

SELECT          S.ID
            ,   S.Name
            ,   COALESCE (D.Description, '-') AS Description
FROM            Schedule    AS S 
LEFT OUTER JOIN Description AS D 
ON              S.ID = D.ID
WHERE           (S.Type = 1)

出力:

でテスト済みMicrosoft SQL Server CE version 4.0.8482.1

ここで出力

于 2012-05-08T03:17:50.187 に答える
1
SELECT S.ID, D.Description 
FROM Schedule AS S FULL OUTER JOIN Description AS D
ON S.ID = D.ID

INNER JOIN両方のテーブルに存在する行のみを選択することを意味します。
FULL OUTER JOIN1つのテーブルに存在する限り、行を選択することを意味します。

あなたが必要FULL OUTER JOINです...

于 2012-05-08T02:48:47.037 に答える
1

OUTER JOINの代わりにを使用し、またはをINNER使用して値を置き換える必要があります。IsNullCoalesceNULL

SELECT S.ID, Coalesce(D.Description , '-') AS Description
FROM Schedule AS S FULL OUTER JOIN Description AS D
ON S.ID = D.ID
于 2012-05-08T02:48:22.030 に答える