小编典典

如何使用表中可能不存在的ID来构建SQL语句?

sql

假设使用Microsoft SQL Server
2008,有一个table1保留选定的省,地区,公社和村庄的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,此语句将给出错误的结果。


阅读 204

收藏
2021-04-07

共1个答案

小编典典

一个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))
2021-04-07