我遇到了 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)中只有一条记录,我根本没有得到记录。
我该如何解决这个问题?
非常感谢您的阅读和帮助,
鲁迪
我对 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