如何从不同表中独占选择一条记录

问题描述 投票:0回答:1

我遇到了 SQL 问题 - 我希望你能帮助我。 DBMS 是火鸟。

现在这是我的问题:

我有两张包含地址的表格,两者的布局非常相似。 一个表包含主地址 (main_addr),另一个表包含附加地址 (add_addr),还包含类型指示符(交货地址、发票地址等)。两者都有一个共同的 ID (addrid),我可以用它来选择地址。 当我寻找主地址时,我肯定会在第一个表(main_addr)中找到它。 然而,表 add_addr 中可能还有一个额外的送货地址

如果 add_addr-table 中有一个条目,我需要使用该条目。但是,如果此表中没有条目,我想回退到表 main_addr。

我怎样才能做到这一点?

我尝试过类似的事情

   iif(add_addr.type = '1', add_addr.name1, main_addr.name1) as Name1,
   iif(add_addr.type = '1', add_addr.name2, main_addr.name2) as Name2
  
   from main_addr
   join add_addr on main_addr.addrid = 105510 
            and add_addr.addrid = main_addr.addrid
            and add_addr.type = '1'  

如果每个表中有一条记录,这将按预期工作 - 在这种情况下,我按预期从表 add_addr 中获取记录。但是,如果主表(main_addr)中只有一条记录,我根本没有得到记录。

我该如何解决这个问题?

非常感谢您的阅读和帮助,

鲁迪

sql firebird
1个回答
0
投票

我对 firebird 一无所知,但在普通 SQL 中,你会在 add_addr 表上执行 left external join 并在未找到其他地址的情况下选择主地址。
所以:

SELECT          COALESCE(add_addr.name, main_addr.name)
FROM            main_addr
LEFT OUTER JOIN add_addr
             ON main_addr.addrid = add_addr.addrid
            AND add_addr.type = '1'
WHERE           main_addr.addrid = 105510 
© www.soinside.com 2019 - 2024. All rights reserved.