问题描述
|
假设使用Microsoft sql Server 2008,有一个表1保留选定的省,地区,公社和村庄的ID。然后是表2,其中包含省,区,公社和村庄的ID和名称。省和地区是必填字段,并且始终会填写。公社和村庄可能会被填补,但由于不需要,甚至可能不会被填补。
在不知道表1中是否填写公社和村庄的ID的情况下,构建动态sql语句的最佳方法是什么。
SELECT tbl1.province,tbl1.district,tbl1.commune,tbl1.village
FROM dbo.table1 AS tbl1
AND dbo.table2 AS tbl2
WHERE tbl1.province = tbl2.province_id
AND tbl1.district = tbl2.district_id
AND tbl1.commune = tbl2.commune_id
AND tbl1.village = tbl2.village_id
如果未填写表1中的ID,则该语句给出错误的结果。
解决方法
OUTER JOIN
在这里行不通,因为您不想让table2中的所有元素都存在,而是只希望表1中存在相应元素的那些元素。
您可能想要执行以下操作:
SELECT tbl1.province,tbl1.district,tbl1.commune,tbl1.village
FROM dbo.table2 AS tbl2
INNER JOIN dbo.table1 AS tbl1
ON tbl1.province = tbl2.province_id
AND tbl1.district = tbl2.district_id
AND (tbl1.commune is NULL OR (tbl1.commune = tbl2.commune_id))
AND (tbl1.village is NULL OR (tbl1.village = tbl2.village_id))