当前位置: 首页 > 面试题库 >

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

戚阳文
2023-03-14
问题内容

假设使用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,此语句将给出错误的结果。


问题答案:

一个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))


 类似资料:
  • 问题内容: 是否可以使用T-SQL执行存储在表中的SQL语句? 表中存储的语句是临时语句,可以是 SELECT TOP 100 * FROM ATable 到更复杂的语句: 我想执行从T-SQL声明的 @Query 变量。这可能吗?(我正在运行MSSQL 2005环境) 问题答案: 您可以使用 运行您的T-SQL 这是SQL Server 2005的MS docn的链接 http://msdn.m

  • 我相信这个sql语句可以工作,但我不知道如何用Java构建这个语句。我的算法技能不是最好的,我试着用一个for循环来处理列表,但我不能拼凑出第二个get引用。太感谢你们了!

  • 这个问题是关于C 20的/功能,而不是编译器定义的宏。 本文档(cppreference)仅给出了将它们应用于switch case语句的示例。这个switch-case示例与我的编译器(g-7.2)完美地编译在一起,所以我假设编译器已经实现了这个特性,尽管它还没有在当前的C标准中正式引入。 但是当我这样使用它们时:,我收到了一个警告: “警告:语句开头的属性被忽略[-Wattributes]”。

  • 问题内容: 如何与创建普通表类似地创建临时表? 例子: 问题答案: 临时表可以有3种,是最常用的。这是仅在当前会话中存在的临时表。与之等效的是声明的表变量。它具有较少的“功能”(如索引等),也仅用于当前会话。的是一个是一样的,但是,范围更广,因此您可以在同一会话中使用它,其他的存储过程中。 您可以通过多种方式创建临时表:

  • 问题内容: 我有以下内容: 创建DB并使用他的前两个 方法工作正常。当运行到该行时,它将引发异常- 问题答案: 这应该在您的情况下有效: 原因:每次执行方法调用时,语句只能执行一个SQL语句。 如果要同时执行两个或多个语句,则可以使用Batch-Jobs来执行。 喜欢:

  • 本文向大家介绍如何在ABAP中使用表构建结构?,包括了如何在ABAP中使用表构建结构?的使用技巧和注意事项,需要的朋友参考一下 在结构内指定表时的基本规则是,您必须对该字段赋予非唯一约束。 然后在结构定义中使用它: