我有以下查询
select *
from monthly_accounts m
join blocks_Dep on (m.code = d.code )
where exists (select R_code
from balance c
inner join blocks_div d on (m.b_id = d.b_id and c.name = d.name)
)
我收到有关无效m.b_i
标识符的错误消息;如何使用连接在存在的第一个表和表之间进行连接?
答案 0 :(得分:1)
也许您收到该错误,因为运营商exists
而不是exist
。这有用吗?
select m.*, d.*
from monthly_accounts m join
blocks_Dep d
on m.code = d.code
where exists (select 1
from balance b inner join
blocks_div bd
on b.name = bd.name
where m.b_id = bd.b_id
);
请注意,我做了其他更改并解决了其他问题:
blocks_dep
没有表别名。where
而不是on
。我不希望在on
中看到相关子句(尽管逻辑是正确的)。答案 1 :(得分:1)
你有一些答案
核心应该站在它自己的上面 使用别名并且不要重复别名
select * from
monthly_accounts m
join blocks_Dep on (m.code=d.code)
d尚未定义。即使查询解析器发现它我怀疑这是你想要的。
这链接m.b_id
不存在,我认为你的意思是什么?
select *
from monthly_accounts m
join blocks_Dep d1
on m.code = d1.code
where not exists ( select 1
from balance c
join blocks_div d2
on d2.b_id = m.b_id
and d2.name = c.name
)