【问题标题】:Howto build a SQL statement with using IDs that might not be available in the table?如何使用表中可能不可用的 ID 构建 SQL 语句?
【发布时间】:2011-09-05 08:55:42
【问题描述】:

使用 Microsoft SQL Server 2008,假设有一个 table1 保存所选的省、区、公社和村庄的 id。然后是 table2,其中包含省、区、公社和村庄的 ID 和名称。省和地区是必填字段,将始终填写。公社和村庄可能会被填满,但甚至可能不会被填满,因为它们不是必需的。

在不知道公社和村庄的 id 是否填入 table1 的情况下构建动态 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

如果table1中的id没有填写,这个语句会给出错误的结果。

【问题讨论】:

  • @David:我认为这不适用于他的场景,请参阅我的回答。如果您认为它确实有效,请善待并提供声明。
  • 对不起,我略读了这个问题 - 你的答案是正确的。
  • 更新了场景。你能支持我目前的陈述吗?
  • 我看不出这种情况有何不同。此外,如果有变化,请接受您的问题的答案并提出一个新问题。

标签: sql sql-server tsql sql-server-2008 dynamic-sql


【解决方案1】:

OUTER JOIN 在这里不起作用,因为您不想拥有 table2 中的所有元素,而只想拥有 table 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))

【讨论】:

    猜你喜欢
    • 2013-12-13
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多