有条件地从多个表联接

时间:2019-12-05 20:57:22

标签: sql oracle join case

SQL是否在Join语句中允许某种形式的条件“表选择”?即。根据预定义的变量/条件选择其他表进行联接。

define var = 1
select * 
from tbl
  join (case when &var=1 then tblA when &var=2 then tblB else tblC end) a on tbl.id = a.id

尝试此方法时遇到的错误是 ORA-00905:缺少关键字

2 个答案:

答案 0 :(得分:6)

不。除非您使用动态SQL,否则SQL和Oracle都不允许这样做。

假设表具有相同的列,则可以将逻辑编写为:

browser = webdriver.Firefox(
    service_log_path="C:\\Users\\[username]\\AppData\\Local\\Temp\\geckodriver.log"
)

答案 1 :(得分:0)

您仍然需要提前指定所有联接,并且必须将它们保留为外部联接,但是您可以像这样重写语句。不管每个表中的字段数如何(联合要求),这种方法都将起作用,并且如果它们的名称不同,则可以按名称访问相应的字段。

DECLARE @var int
SET @var=1

select tbl.*, tblA.ShippingName, tblB.BillingName, tblC.OtherName 
from tbl
  left outer join tblA on tbl.id = tblA.id and @var = 1
  left outer join tblB on tbl.id = tblB.id and @var = 2
  left outer join tblC on tbl.id = tblC.id and @var = 3