Tsql 如何连接SQL Server CE中具有不同列的两个表?

Tsql 如何连接SQL Server CE中具有不同列的两个表?,tsql,join,sql-server-ce,Tsql,Join,Sql Server Ce,如何连接SQL Server CE中具有不同列的两个表 我有两张桌子: 表时间表 +-----+----------+------+ + ID + Name + Type + +-----+----------+------+ + 1 + A + 1 + + 2 + B + 1 + + 3 + C + 2 + +-----+----------+------+ 表说明 +-----+---------------

如何连接SQL Server CE中具有不同列的两个表

我有两张桌子:

时间表

+-----+----------+------+
+ 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不在
说明
表中时,
说明
列应由
-
填写

我尝试了以下代码:

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      +
+-----+----------+-----------------+
当我试着给出一个条款:

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子句(请参见上面的表
附表

我试过:

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'

但是仍然可以得到整行。

您需要使用
外部联接
而不是
内部联接
,并使用
IsNull
合并
替换
NULL
值:

SELECT S.ID, Coalesce(D.Description , '-') AS Description
FROM Schedule AS S FULL OUTER JOIN Description AS D
ON S.ID = D.ID
内部联接
表示只选择两个表中存在的行。
完全外部联接
意味着选择行,只要它们存在于一个表中


您需要
完全外部连接

您需要
左侧外部连接

SQLFiddle:

查询:

select s.ID, s.Name, Coalesce(d.description,'-') as description
from schedule s 
left outer join description d on d.id = s.id
SQL Server CE中的左外部联接 您需要使用
LEFT-OUTER-JOIN
来连接键字段ID上的表计划和说明。另外,使用
COALESCE
将描述列中的空值替换为
-

脚本: 输出: 在Microsoft SQL Server CE 4.0.8482.1版中测试

带WHERE子句 您需要在联接之后添加
WHERE
子句。如果您计划按
订购
,则应在
WHERE
子句之后

脚本: 输出: 在Microsoft SQL Server CE 4.0.8482.1版中测试


它返回:
错误中的令牌=JOIN
。发生了什么?我尝试了
内部联接
,但当尝试
外部联接
时,它返回消息..FYI
IsNull
不是ANSI标准,如果有疑问,您应该使用
合并
。@Ken White:我不确定为什么它现在可以工作。我更新了上面的代码,请看一下。如何在其上添加WHERE子句?它返回:Token in Error=JOIN。发生了什么?我尝试了内部连接,但当尝试外部连接时,它返回消息。我的SQL是ASP上的SQL CE。Net@mrjimoy_05. 尝试
FULL-OUTER-JOIN
。这是相同的,但是现在得到
Token-in-Error=FULL
。>@Jimoy_05先生。嗨,它起作用了。但结果仍然不是我想要的。请查看上面更新的代码。不,它现在可以工作了。但是如何在上面添加WHERE子句呢?请参见上面更新的代码。:)
select s.ID, s.Name, Coalesce(d.description,'-') as description
from schedule s 
left outer join description d on d.id = s.id
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
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)