我遇到的问题是加入两张桌子。一个表包含所有通用数据,第二个表包含已给定特定值的旧字段。下面的示例表有助于澄清我的设置。
ParaIndex ParaName ParaDefault
1 Cat 15
2 Fish 8
3 Dog 3
Project ParaIndex ParaValue
John 1 6
John 2 7
Alan 3 9
然后,目标是将这些表连接起来以获得单个表:
ParaName ParaIndex ParaValue ParaDefault
Cat 1 6 15
Fish 2 7 8
Dog 3 3
因此,表3将返回表1中的所有行,但仅显示ParaValue的值,它们不为空。 E到目前为止,我尝试过的是更改连接类型,不同选择,分组,选择子查询以及其他帖子中提到的建议的组合。
最终目标是在vb.net中将此查询用作表单的标准。
我得到的最接近的是返回表3中的请求数据,但它会排除未请求的行(例如,如果查询是'John',那么它将排除'Alan'标记的参数在这种情况下是3-Dog。)
SELECT t1.ParaName, t1.ParaIndex, t2.ParaValue, t1.ParaDefault
FROM Table1 AS t1LEFT OUTER JOIN Table2 AS t2
ON t1.ParaIndex = t2.ParaIndex
WHERE (((t2.ParaIndex) is null) OR t2.Project = 'John')
答案 0 :(得分:0)
您必须使用LEFT OUTER JOIN
:
SELECT t1.ParaName,
t1.ParaIndex,
COALESCE(CAST(t2.ParaValue AS VARCHAR(10), '') AS ParaValue,
t1.ParaDefaule,
FROM dbo.Table1 t1
LEFT OUTER JOIN dbo.Table2 t2
ON t1.ParaIndex = t2.ParaIndex
WHERE t2.Project = 'John'
ORDER BY t1.ParaIndex