例如与Oracle:我想要一些临时表是用于合并:有没有一种有效的方法来避免SQL中的固定值UNION?
MERGE INTO my_target_table
USING (
WITH tbl1 AS ( SELECT 'a' col1 FROM dual -- <--- THIS
UNION SELECT 'foo' col1 FROM dual -- <--- IS
UNION SELECT 'doh' col1 FROM dual -- <--- CRAPPY
),
tbl2 AS ( SELECT 'b' col2, 'c' col3 FROM dual -- <--- THIS
UNION SELECT 'x' col2, 's' col3 FROM dual -- <--- ALSO
)
SELECT col1, col2, col3 FROM tbl1 CROSS JOIN tbl2
) my_source_view
ON ( my_target_table.col1 = my_source_view.col1
AND my_target_table.col2 = my_source_view.col2
)
WHEN MATCHED THEN UPDATE
SET my_target_table.col3 = my_source_view.col3
WHEN NOT MATCHED THEN INSERT( col1, col2, col3)
VALUES(my_source_view.col1, my_source_view.col2, my_source_view.col3)
;
这里的SELECT UNION SELECT
模式实在是烦人,我觉得它可怕(重复,冗长)。
难道你有一个技巧来伪造类似的查询,不管它是否是Oracle特有的?
谢谢
如何使用表格存储* fixed *值? – dotjoe 2011-03-24 13:50:37
@dotjoe:你如何快速填充它? 'INSERT INTO SELECT UNION SELECT'表。 – Benoit 2011-03-24 13:51:56
难道你不能简单地填写一次,重用表?或者值改变了吗? – dotjoe 2011-03-24 14:02:34