有一些表有一些字段(在PostgreSQL上):
Table1 {a, b, c}
Table2 {c, d, a}
Table3 {f, g, a}
我需要联合多个查询并获取a
字段。所有这些查询都具有相同的条件CONDITION_A
和其他条件:CONDITION_1
,CONDITION_2
,CONDITION_3
结合条件的哪种方式对于工会更可取?
1)CONDITION_A
嵌入到每个查询中:
SELECT a FROM Table1 WHERE <CONDITIONS_1> AND a.someParam=<CONDITION_A>
UNION
SELECT a FROM Table2 WHERE <CONDITIONS_2> AND a.someParam=<CONDITION_A>
UNION
SELECT a FROM Table3 WHERE <CONDITIONS_3> AND a.someParam=<CONDITION_A>
2)CONDITION_A
是在工会之后嵌入的。
(SELECT a FROM Table1 WHERE <CONDITIONS_1>
UNION
SELECT a FROM Table2 WHERE <CONDITIONS_2>
UNION
SELECT a FROM Table3 WHERE <CONDITIONS_2> ) WHERE a.someParam=<CONDITION_A>
答案 0 :(得分:3)
首先,你真的需要fun run() {
fun makePair() = Pair("Apple", "Orange")
val (a, b) = makePair()
println("b = $b")
}
吗?如果您可以使用union
,则查询会运行得更好,因为union all
会产生删除重复项的开销。
将条件设置为接近union
可能是一个好主意。这为优化器提供了更多优化查询的机会。例如,每个查询可能包含from
的索引,可以在子查询中使用。