假设我的表test
的列为a,b
,而c
和test2
的列相同。我可以创建表测试的视图并将表2结合在一起并由表测试的字段c排序的测试2,而不在最终输出中显示它吗?就我而言:
CREATE VIEW AS test_view AS
SELECT a,b FROM (SELECT * FROM test ORDER BY c)
JOIN test2 ON test.a =test2.a;
好吧,我测试了它,因为混洗阶段是不可能的,所以也许有另一种解决方案吗?表太大,无法进行广播连接。
我当然可以做
CREATE VIEW AS test_view AS
SELECT a,b,c FROM test
JOIN test2 ON test.a =test2.a
ORDER BY c
然后
CREATE VIEW AS final_view AS
SELECT a,b FROM test_view;
但是这种解决方案不是最佳选择
有什么主意吗?
答案 0 :(得分:1)
这是您正在看的吗?
CREATE VIEW AS test_view AS
SELECT a,b FROM
(SELECT * FROM
test t1 JOIN test2 t2
ON test.a =test2.a
ORDER BY t1.c
) abc;
答案 1 :(得分:0)
请考虑与上层表相同的视图。从中选择不返回有序数据集,仅上层查询保证顺序中的order by
(或distribution + sort)。如果您将此视图具体化为已排序的表,则不能保证从中选择结果进行排序,因为该表是并行读取的,并且返回的行不是“原始顺序”。 古典理论说,有序表违反了第一个NF。
无法在符合SQL:2003的数据库中创建顺序视图。
按内部视图排序没有任何意义。因此,按视图中的不可见列进行排序也是没有意义的。 改为在上部查询中使用ORDER BY。 在上部查询保证单中仅order by
(或分发+排序)。
答案 2 :(得分:0)
我最终得到
CREATE VIEW AS test_view AS
SELECT a,b,c FROM test
JOIN test2 ON test.a =test2.a
ORDER BY c
然后
CREATE VIEW AS final_view AS
SELECT a,b FROM test_view;
这可能不是最佳选择,但这只是使所有内容井井有条的保证方式,在我的情况下(大约4-5次加入),一目了然要容易得多。当然,我们也可以将test_view创建为临时视图,但这只是完善。
但是也许你们中的一些人有其他可行的解决方案-随时发布:)