我有这样的代码
select a1.col1,
a1.col2
from a1
inner join b2 b21
on (a1.col1 = b21.col1 and b21.col5 = 'some constant')
inner join b2 b22
on (a1.col2 = b22.col2 and b22.col5 = 'some other constant')
如何重写此代码,所以我不重复表b2。 我想只使用表b2作为一个巨大的表
答案 0 :(得分:2)
你能解释一下表之间的关系吗?通常,您无法重写该查询,因此它只使用B2
表一次。但是,如果我们可以对数据做出一些假设,很多情况下都可以重写。
如果A1
中的每一行都映射到B2
中每行的一行,您可以执行类似
select a1.col1,
a1.col2
from a1
inner join b2 b21
on ( a1.col1 = b21.col1
and b21.col5 IN( 'some constant', 'some other constant'))
但如果A1
映射到B2
中的{2}行,其中COL5
为“某个常量”,而B2
中有3行,COL5
为'一些其他常量',原始查询将返回6个相同的行,此查询将只返回5个相同的行。
答案 1 :(得分:0)
您可以尝试在这些行上使用 WITH 某些内容(查询未测试)
WITH onetab as (SELECT col1, col2 FROM b2 WHERE col5='c1' or col5='c2')
SELECT a1.col1, a1.col2
FROM a1
inner join onetab on a1.col1 = onetab.col1 and a1.col2 = onetab.col2
希望这能为您带来理想的结果
答案 2 :(得分:0)
另一种选择:
select a1.col1,
a1.col2
from a1, b2
where
a1.col1 = b2.col1
and a1.col2 = b2.col2
and b2.col5 in ('some constant', 'some other constant')