在SQL视图中联合JOIN

时间:2014-07-10 15:08:08

标签: sql stored-procedures union sql-view

我的情况是SQl表(A)包含格式为的数据:

MODEL ID | PERIOD ID | VERSION | RESOURCEDRIVER | VALUE

Period字段包含APRIl,MAY,JUNE等,但也包含一个名为“PERIODS”的值,这在数据库中用于表示该行适用于所有其他句点APRIL,MAY,JUNE。

我正在尝试将表格链接到另一个没有此设置的表格 - I.E“PERIODS”不存在。因此,我需要为“PERIODS”表示的每个组合创建一个文字条目。

为此,我创建了一个SQL视图(B),其中列出了:

MODEL ID| PERIOD ID | PERIOD NAME

此表已经过滤,因此不包括值“PERIODS”和/或任何其他非desirables。

然后我设置了第三个视图(C),它过滤了表A中PERIOD =“PERIODS”的数据,并在MODEL A上创建了一个表A和VIEW B之间的连接,这样对于值“PERIODS”的每一行出现 - 创建了多行来替换它。这适用于这些行,但我现在需要将结果集与原始表A联合起来,其中是字面值,即APRIL,MAY,JUNE。

在一个查询中,我可以做到这一点,因为我将每个选择到临时表中,在两个临时表之间执行UNION查询,输出结果并删除临时表。

这里的问题是,这只是SQL视图链的第一部分,因此我需要将结果传递给下一个查询。 (所以我想也许商店程序可以运作)

但我担心的是,这些数据可能会被多个用户同时请求,因此不能让它们全部触发临时表创建,因为它们会覆盖彼此的数据。

有人能告诉我实现联合数据集的最佳方法是在SQL视图中吗?

谢谢

2 个答案:

答案 0 :(得分:1)

SELECT model_id, period_id, version, resourcedriver, value, NULL AS period_name FROM table_1
UNION ALL
SELECT model_id, period_id, NULL AS version, NULL as resourcedriver, NULL as value, period_name FROM table_2

答案 1 :(得分:0)

我觉得XY Problem的问题受到了影响:而不是问OP真正的问题,OP要求解决他到目前为止所做的事情。


此问题非常类似于常见的“我希望NULL在查询中充当通配符”后者的解决方案:JOIN关于平等或NULL

a.Key = b.Key OR a.Key IS NULL

第一个条件将检查共享值,第二个条件告诉DB,如果a.Key中的值是NULLb.Key中的值无关紧要。< / p>

唯一的区别是通配符是特定值而不是NULL,因此条件从IS NULL更改为= wildcard

a.Key = b.Key OR a.Key = 'wildcard'

查询是在不知道OP系统的情况下编写的,在问题中只描述了基表,模型可以很容易地适应(或者如果OP添加信息并要求我可以编辑它)

SELECT a.Model_ID, a.Period_ID PeriodA, b.Period_ID PeriodB
FROM   TableA a
       INNER JOIN TableB b ON a.Model_ID = b.Model_ID
                          AND (a.Period_ID = b.Period_ID 
                            OR a.Period_ID = 'PERIODS')

SQLFiddle demo 演示在T-SQL中,但查询仅使用标准运算符。