Tsql 如何连接SQL Server CE中具有不同列的两个表?
如何连接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 + +-----+----------+------+ 表说明 +-----+---------------
+-----+----------+------+
+ 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
。发生了什么?我尝试了内部联接
,但当尝试外部联接
时,它返回消息..FYIIsNull
不是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)