2011-05-31 42 views
3

使用Microsoft SQL Server 2008,假設有一個table1保存選定的省,區,公社和村莊的id。然後是帶有省,區,市和村的ID和名稱的表2。省和地區是必填字段,將始終填滿。公民和村莊可能會被填補,但甚至可能沒有填補,因爲它們不是必需的。Howto使用可能在表中不可用的ID生成SQL語句?

什麼是建立動態SQL語句的最佳方式,而不需要知道公社和村莊的id是否填充到table1中。

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 

如果table1中的id未填充,則此語句給出錯誤結果。

+0

使用外連接 - http://msdn.microsoft.com/en-us/library/ms187518.aspx – 2011-05-31 10:11:09

+0

@大衛:我不認爲這會在他的設想中工作,看到我的回答。如果您認爲它確實有效,請儘可能提供相關聲明。 – 2011-05-31 10:17:26

+0

對不起,我翻閱了這個問題 - 你的回答是正確的。 – 2011-05-31 10:23:17

回答

4

OUTER JOIN不會在這裏工作,因爲你不希望有從表2的所有元素,但只有那些相應的元素在表中存在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))