由于系统数据库的非规范化性质,我正在执行相当复杂的 SQL 查询。查询流程如下。
我从我加入SELECT
的几个表中创建一些字段之一。
然后,根据其中一个字段的值,(A,B,C,D)
我必须加入另一个表。例如,如果是类型'A'
,则加入将反对CabecerasA
,如果是,'B'
则反对CabecerasB
,依此类推。
我想使用 a Switch Case
,但我不知道如何实现它。我提出了一个示例查询:
SELECT id , att1 , att2 , tipo
FROM Table1 inner Join Table2 on(...)
inner Join Table3 on(...)
根据属性的值,'tipo'
我必须将这个查询与对应的表连接起来。
我应该如何申请Switch Case
?
快速回答:你不能。CASE 在数据/列级别工作,它不参与 FROM/JOIN。您想要做的基本上是多个 LEFT JOIN,具体取决于每个字段的值
tipo
我的意思是,你不能逃避将所有相应的左连接添加到每个
tipo
,除非......你使用单独的查询并使用 UNION 加入它们根据数据,一种形式可能比另一种形式更“执行”。
解决它的一种方法是动态生成查询,即根据您想要的所有条件形成查询:
在我给出的示例中,您将收到一个
tipo A
,生成的脚本的输出如下: