我的情况是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视图中吗?
谢谢
答案 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
中的值是NULL
,b.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中,但查询仅使用标准运算符。