我在 Oracle 上下文中有 3 个表,我们称它们t1, t2, t3
为具有以下结构:
t1 : t1_ID, t1_name, ...
t2 : t1_ID, t3_name, ...
t3 : t3_name, randomCol1, randomCol2, randomCol3, ...
我想要的是一个给我这样的结果的查询:
t0_name | 随机数
所以我做了这个查询:
SELECT t1.t1_name, t3.randomCol1 AS randomCol
FROM t1
JOIN t2 ON t1.t1_ID=t2.t1_ID
JOIN t3 ON t2.t3_name=t3.t3_name
WHERE t3.randomCol1 LIKE '_%'
UNION
SELECT t1.t1_name, t3.randomCol2 AS randomCol
FROM t1
JOIN t2 ON t1.t1_ID=t2.t1_ID
JOIN t3 ON t2.t3_name=t3.t3_name
WHERE t3.randomCol2 LIKE '_%'
UNION
SELECT t1.t1_name, t3.randomCol3 AS randomCol
FROM t1
JOIN t2 ON t1.t1_ID=t2.t1_ID
JOIN t3 ON t2.t3_name=t3.t3_name
WHERE t3.randomCol3 LIKE '_%'
因为我希望 randomCols 的所有值都以单列开头,_
并与链接到它们的 t1_name 配对。为了提供更多的信息,randomCol1 和 randomCol2 几乎相同(它们都不是同时为 null 并且具有几乎相同的值),而 randomCol3 通常为 null。
我知道这在性能方面很糟糕,所以我试图改进它。
因此,我在网上搜索了各种优化此解决方案的方法(例如使用 UNION ALL 之类的东西),但没有给我想要的确切结果。
所以我的问题如下: 您知道如何优化此查询吗?
问候