我遇到的问题是连接两个表。一个表包含所有通用数据,第二个表包含已给定特定值的旧字段。下面的示例表应该有助于澄清我的设置。
表1(通用数据)
ParaIndex ParaName ParaDefault
1 Cat 15
2 Fish 8
3 Dog 3
表2(具体数据)
Project ParaIndex ParaValue
John 1 6
John 2 7
Alan 3 9
然后的目标是连接这些表以获得一个表:
表3("John"的ParaIndex上的表Join)
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')
您必须使用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